データの保存
データの保存にはモデルのsaveメソッドを使用します。レコード追加(insert)とレコード更新(update)のどちらの場合もsaveメソッドを使用します。複数のレコードあるいは関連モデルのデータを同時に保存する場合にはsaveAllメソッドを利用します。
レコード追加(insert)とレコード更新(update)
saveメソッドがレコード追加(insert)とレコード更新(update)のどちらを行うかは、モデルにプライマリー・キーの値を指定しているかどうかでによります。プライマリー・キーの値が指定されていて該当レコードが存在すればレコードを更新し、該当レコードがないかプライマリー・キーが指定されていなければレコードを追加します。
コントローラに記述するデータ保存の一般的なコード。$this->dataにはフォームから送信されたデータが入っています。
$this->Post->create();//追加の場合 $this->Post->save($this->data);
saveメソッドの詳細
save(array $data, boolean $validate = true, array $whitelist )
$data
保存するデータの配列
$validate
データ検証を行うかどうかをtrueまたはfalseで指定。
または次のキーを持つ配列を指定する。配列で指定した場合は、saveメソッドの$fieldListは無視される。
- validate
- データ検証を行うかどうか(true/false)
- callbacks
- コールバックを実行するかどうか(true/before/after)
- fieldList
- データを更新するカラム名のホワイトリスト。
$whitelist
データを更新するカラム名のホワイトリスト。更新するカラムを指定する事で予期せぬカラムへのデータの更新を防ぐ事が出来ます$validateのfieldListキーで指定した場合はそちらが優先される。
トピック
レコード追加のための初期化
createメソッドを使うとデータを初期化できます。モデルにプライマリー・キーの値を空にし、各フィールドに初期値を設定します。
自動入力カラム
'created'はレコード作成日時、'updated'または 'modified'はレコード修正日時として自動入力されます。テーブル定義でデフォルト値を'null'に設定しておく必要があります。検証ルールでどちらかの日時だけを自動入力させる事も出来ます。
同種のメソッド
saveAll
複数レコードまたは関連レコードの追加と更新
saveField
1つの指定カラムの内容だけを更新します。事前にモデルのid属性にレコードIDをセットしておいてから実行します。
$this->Post->id=$id; $this->Post->saveField('title','new title');