[CakePHP] 小ネタ4
CakePHPの小ネタシリーズの第4段です。
知っていて当然というものばかりですが、覚え書きということで。。。
今回はアソシエーションしたテーブルへのデータ保存についての小ネタです。。
複数テーブルへの保存
データベースのテーブルを以下のように作成しました。
[users]
id | username | password
[names]
id | user_id | name
[areas]
id | user_id | area
[texts]
id | user_id | text
これらのテーブルを「user_id」によりアソシエーションします。
そして、UsersController.php内でデータの保存を行います。
「save()」を使用して保存しようとしても、ユーザーテーブルにしか保存処理が行われないので、「saveAll()」を使用します。
$this->User->saveAll($data);
ここで、「$data」には、それぞれの登録データを格納しておきますが、複数保存させる場合、どれかのデータが一つでも欠如(空の値)していると、バリデーションエラーとなります。
(バリデーション設定を全てNULL値でもOKにしておけばエラーは出ません。)
バリデーションを無効にして保存させるには、オプションで指定できます。
$this->User->saveAll($data, array('validate'=>false));
注意点として、「$data」には「id」を指定していない状態で保存を行うと「INSERT」となり、データを追加登録してしまいます。
データの変更(UPDATE)をさせる場合は、「id」をちゃんと指定しましょう。
Comment