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

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']);
    }
}