我正在使用cacheCounter
in CakePHP
,它会增加相关字段的计数器.
例如,我有一个Person表一个Source表.Person.source_id映射到Source表中的一行.每个人都有一个Source,每个Source都没有或很多Person行.
cacheCounter
当我改变一个人的一个来源的价值时工作得很好.它递增Source.Person_Count
.凉.
但是当它递增时,它会将其添加到人的目标源,但不会将其从旧值中删除.我试过updateCacheControl()
了afterSave
,但那没有做任何事情.
那么我在我的模型中编写了一些代码afterSave
来减去源source_id,但即使我甚至没有改变它,它总是这样做source_id
.(所以计数变为负数).
我的问题:有没有办法判断模型中的字段是否已更改CakePHP
?
要监视字段中的更改,可以在模型中使用此逻辑,而不需要在其他位置进行更改:
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; }
参考Alexander Morland答案.
怎么样,而不是在过滤之前循环它.
$result = array_diff_assoc($this->old[$this->alias],$this->data[$this->alias]);
你也会获得关键和价值.