CakePHP Note (v1.3) > モデル > データの保存

データの保存

データの保存にはモデルの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');

CakePHP Note (v1.3)

Index