CakePHP3で複数のテーブルを1つのアクションで同時に登録する方法

34 回閲覧されました
みなさんこんにちは、jonioです。
今回は複数のテーブルの値を同時に登録する方法の解説です。
CakePHPのバージョン
3.6で確認しています。
テンプレート
下記の記述をします。
<?= $this->Form->create(null, ['url' => ['controller' => 'Democontroller', 'action' => 'demoAction'], 'method' => 'post']) ?>
//登録する為の記述
<?= $this->Form->end() ?>
「登録する為の記述」の部分は1つのテーブルに保存する時と全く同じなので省略します。
コントローラー
やり方は簡単で1つのアクションの中でテーブルに保存する処理を複数回記述するだけです。
今回は2つのテーブルに保存します。
public function demoAction()
{
if ($this->getRequest()->is('post')) {
$data1 = $this->Model1->get($idの値);
$data1 = $this->Model1->patchEntity($data1, $this->getRequest()->getData());
if ($this->Model1->save($data1)) {
$this->Flash->success(__('OK1'));
}
$data2 = $this->Model2->get($idの値);
$data2 = $this->Model2->patchEntity($data2, $this->getRequest()->getData());
if ($this->Model2->save($data2)) {
$this->Flash->success(__('OK2'));
}
return $this->redirect(['controller' => 'AnotherController', 'action' => 'anotherAction']);
}
}