[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」をちゃんと指定しましょう。

Share

  • このエントリーをはてなブックマークに追加

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed