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