1

我在任何地方都没有看到这个记录,所以我问你,我亲爱的吃蛋糕的人。

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?
        }
    }
?>
4

1 回答 1

1

您始终可以将当前 id 存储在 $tmp 中,并在完成后将此存储的 id 分配回模型

$tmp = $Model->id;
// ...
$Model->id = $tmp;

这样您就不会在使用 Model-id 时遇到问题。

是否保存取决于您在模型中的工作方式。我 - 例如 - 从不依赖这个 id。我总是在任何更新或删除调用等之前手动将 id 分配给模型。但这当然不是必需的。不过,你必须更加小心。

于 2012-04-28T09:56:07.237 回答