我没有在任何地方看到这个记录,所以我问你,亲爱的吃蛋糕。
内部一个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?
}
}
?>
答案 0 :(得分:1)
您可以随时将当前ID存储在$ tmp中,并在完成后将此存储的ID分配回模型
$tmp = $Model->id;
// ...
$Model->id = $tmp;
这样您就不会遇到使用Model-id的问题。
如果保存与否取决于您在模型中的工作方式。 我 - 例如 - 从不依赖这个id。在任何更新或删除调用等之前,我总是手动将id分配给模型。当然,这不是必需的。不过,你必须要小心。