5.0.11 模型save方法,条件不一样数据一样导致不更新

浏览:310 发布日期:2017/09/13
5.0.0 - 普通 - 未处理
获取变化的数据,只根据数据是否跟上条更新的数据是否一样做排除,是不是有点草率,是否应该加上并且更新条件一样,再做排除。

或者新增个初始化$origin方法public function ($origin = []){
 $this->origin = $origin;
return $this;
}
比如我第一次和第二次更新内容一致,但where条件不一致,导致获取的更新数据为空而无法更新$model = model("config");
$data = array("value"=>"aaa");
$where = array("name"=>"web");
$model->save($data,$where);


$data = array("value"=>"aaa");
$where = array("name"=>"name");
$model->save($data,$where);
  
//model save方法
// 获取有更新的数据
            $data = $this->getChangedData();

            if (empty($data) || (count($data) == 1 && is_string($pk) && isset($data[$pk]))) { //empty($data) 结果是true
                // 关联更新
                if (isset($relation)) {
                    $this->autoRelationUpdate($relation);
                }
                return 0;
/**
     * 获取变化的数据 并排除只读数据
     * @access public
     * @return array
     */
    public function getChangedData()
    {
        $data = array_udiff_assoc($this->data, $this->origin, function ($a, $b) {
            if ((empty($b) || empty($b)) && $a !== $b) {
                return 1;
            }
            return is_object($a) || $a != $b ? 1 : 0;
        });

        if (!empty($this->readonly)) {
            // 只读字段不允许更新
            foreach ($this->readonly as $key => $field) {
                if (isset($data[$field])) {
                    unset($data[$field]);
                }
            }
        }

        return $data;
    }
评论(
后面还有条评论,点击查看>>