LoginSignup
26
26

More than 5 years have passed since last update.

CakePHP3のpatchEntitiesの使いどころについて

Last updated at Posted at 2016-05-16

CakePHP3のpatchEntitiesの使いどころについて

Cookbook3を見てイマイチ使い方が分からなかったので調べてみました。

結論を先に書くと、複数レコードのデータを一括でpatchしてくれるものだった(entitiesと複数形になっているくらいだからそりゃそうだ)

早速使ってみる

今回用意したDBテーブル

01.png
※postgreSQLです

Postデータを作る画面

02.png

ブラウザの開発者ツールで見るとこんな感じ

03.png

※name属性が配列になっていて、1年分ということで12個あることになります。

Postされるデータの確認

patchEntities に引数として渡すので先に中身を確認

dump($this->request->data);

04.png

問題のpatchEntitiesを使ってみる

こんな感じで使う

$entities = $table->patchEntities($entities, $this->request->data('MonthlyMarks'));

・args1:entityの配列データ
・args2:postの配列データ

ちゃんとバリデーションもやってくれます

05.png

レコード単位で処理してくれます。
凄い便利!

折角なのでpatchEntitiesされたentitiesをSaveしてみる

patchEntitiesをした次の行に記述

if ($table->saveMany($entities)) {
    $this->Flash->success(__d($pluralar, 'The {0} has been saved', __(Inflector::camelize($pluralar))));
    return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__d($pluralar, 'The {0} could not be saved', __(Inflector::camelize($pluralar))));

何してくれてるの?

端的に言うとpatcheEntitiesEntity単位で処理してくれます。(複数形だか(ry
そしてpatchEntitiesされたものを最終的にsaveManyで一括保存してます。
(CakePHP2のSaveAllみたいなことができます)

動かない場合は

patcheEntitiesの引数がミスっている。

・args1:entityの配列構造になっていること
・args2:postデータがpatchできる配列構造になっていること

この辺を確認してみましょう。

まとめ

複数レコードの一括保存があった場合はpatchEntitiessaveManyを使いましょう。

26
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
26