ThinkPHP save()时检查数据,如果没有变化就不执行SQL语句

在Model.class.php中,_before_update方法里面改


   // 更新数据前的回调方法
    protected function _before_update(&$data, $options)
    {
        //检查数据有没有变化,如果没变化就不用更新数据库
        $data_changed = false;

        foreach ($data as $key => $val) {
            if ($this->data[$key] != $val) {              
                $data_changed = true;
                break;
            }
        }

        return $data_changed;
    }

注意这里判断数据是否改变的语句:  if ($this->data[$key] != $val)

不能用 !==, 因为,如果某个字段在数据库里是整数,而从前端来的数据可能是字符串,虽然看起来它们的值是一样的,但是类型是不一样的。


在 约534行左右: 

    if (is_array($options['where']) && isset($options['where'][$pk])) {
            $pkValue = $options['where'][$pk];
        }
   
        if (false === $this->_before_update($data, $options)) {
            return false;
        }
        $result = $this->db->update($data, $options);

猜你喜欢

转载自blog.csdn.net/wuzuyu365/article/details/80983705