【CakePHP3】patchEntityの使い方

よくあるpatchEntityの使い方の例は、

$post = $this->Posts->get(1);
$this->Posts->patchEntity($post, $this->request->getData());
$this->Posts->save($post);

こんな感じで、対象のデータを変数に格納して、そのデータにフォームから送られてきたデータで更新するみたいな感じだと思いますが、

これではフォームから送られてきたデータでそのまま更新されてしまうのでちょっとだけデータをいじりたいときどうやるんだろうってなりました。

調べてみたところ、$this->request->getData()には連想配列で値が格納されているらしいので、自分で連想配列を作って、それをpatchEntityに渡せば更新できるっぽいです。

例えば、postsテーブルのカラムがid, title, contents だとしたら、

$post = $this->Posts->get(1);
$data = [
    'title' => 更新したい値,
    'contents' => 更新したい値,
]
$this->Posts->patchEntity($post, $data)
$this->Posts->save($post);

これでデータを少しいじったりして、値の更新ができます。

また特定のカラムのみ値を更新したい場合は、

$this->Post->patchEntity($post, $data, [
    'fields' => ['カラム1'、'カラム2']
]);

としてあげれば、意図していないカラムの更新を防ぐことができるっぽいです。