【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'] ]);
としてあげれば、意図していないカラムの更新を防ぐことができるっぽいです。