当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在CakePHP中,如何确定编辑操作中的字段是否已更改?》经验,为你挑选了2个好方法。

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

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

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

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

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

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



1> Alexander Mo..:

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

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;
}



2> Vins..:

参考Alexander Morland答案.

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

$result = array_diff_assoc($this->old[$this->alias],$this->data[$this->alias]);

你也会获得关键和价值.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有