どこにも書かれていませんので、私の親愛なるケーキ食べる人に尋ねます。私は$Model->data
配列への変更を読み書きBehaviorのBeforeSaveコールバックでModelを使ってクエリを実行するのは安全ですか?
インサイドCakePHPのBehavior::BeforeSave(&$Model)
方法。私が終了する前に、データベースから他のレコードを読み込む必要があります。私が$Model->find()
を使用すると、保存しようとしているモデル内の現在のデータが上書きされてしまうのではないかと心配です。
Model::find()
関数は、ソースコードを表示すると、明らかに変数Model::$id
をリセットします。これは、フィールドが更新されているかどうかを確認するために後で使用する変数と同じです。
<?php
class UniqueBehavior extends ModelBehavior {
function beforeSave(&$Model){
$value = $Model->data[$Model->alias]['unique_field'];
$query = array('conditions' => array('unique_field' => $value));
if ($Model->find('first', $query){
// Does $Model::find() reset the internal $Model->data array?
$Model->data[$Model->alias]['unique_field'] = "..."
//... some other code here
}
//ALSO...
if ($Model->exists()) // Returns true if a record with the currently set ID exists.
$slug = $Model->field('slug');
// this should fetch the slug of the currently updated Model::id from the database
// if I do find()'s, can I trust that the record I'm getting is the right one?
}
}
?>
$ Model-> dataプロパティとは何ですか?私は一時的な配列にも保存する必要がありますか? –
でも修正されているとおそらく賢いでしょう – mark
意味があります。ケーキのドキュメントは、スコープ、リファレンス、リクエストデータ、コールバックについて少し不足しています。 MVCの構造を理解するために、多くのコアコードを掘り下げなければなりませんでした。 –