在CakePHP中,如何确定编辑操作中的字段是否已更改?

Jus*_*tin 11 php cakephp

我正在使用cacheCounterin CakePHP,它会增加相关字段的计数器.

例如,我有一个Person表一个Source表.Person.source_id映射到Source表中的一行.每个人都有一个Source,每个Source都没有或很多Person行.

cacheCounter当我改变一个人的一个来源的价值时工作得很好.它递增Source.Person_Count.凉.

但是当它递增时,它会将其添加到人的目标源,但不会将其从旧值中删除.我试过updateCacheControl()afterSave,但那没有做任何事情.

那么我在我的模型中编写了一些代码afterSave来减去源source_id,但即使我甚至没有改变它,它总是这样做source_id.(所以计数变为负数).

我的问题:有没有办法判断模型中的字段是否已更改CakePHP

Ale*_*and 17

要监视字段中的更改,可以在模型中使用此逻辑,而不需要在其他位置进行更改:

function beforeSave() {
    $this->recursive = -1;
    $this->old = $this->find(array($this->primaryKey => $this->id));
    if ($this->old){
        $changed_fields = array();
        foreach ($this->data[$this->alias] as $key =>$value) {
            if ($this->old[$this->alias][$key] != $value) {
                $changed_fields[] = $key;
            }
        }
    }
    // $changed_fields is an array of fields that changed
    return true;
}
Run Code Online (Sandbox Code Playgroud)


Vin*_*ins 7

参考Alexander Morland答案.

怎么样,而不是在过滤之前循环它.

$result = array_diff_assoc($this->old[$this->alias],$this->data[$this->alias]);
Run Code Online (Sandbox Code Playgroud)

你也会获得关键和价值.