我在任何地方都没有看到这个记录,所以我问你,我亲爱的吃蛋糕的人。
在CakePHP 的Behavior::BeforeSave(&$Model)
方法中,我读取和写入对$Model->data
数组的更改。在我完成之前,我需要从数据库中读取一些其他记录。我担心,如果我使用$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?
}
}
?>