软删除SofeDelete中的restore()方法问题

浏览:2181 发布日期:2016/12/01
5.0.0 - 普通 - 未处理
ThinkPHP5提供的软删除功能很方便。
我们使用软删除的目的之一,就是以后如果想恢复被删除记录时,可以进行恢复操作,这是ThinkPHP给用户的“后悔药”;
但是该trait类中的数据恢复方法:restore()有问题,请看如下描述:

文件位置:/thinkphp/library/traits/model/SoftDelete.php
public function restore($where = [])
    {
        $name = $this->getDeleteTimeField();
        // 恢复删除
        return $this->isUpdate()->save([$name => null], $where);

    }
方法源码,理解起来很简单,选择表中的删除时间字段,然后根据用户条件将该字段置null值即可。但是生成的SQL有问题。
1. 根据源码看,参数为空,应该是恢复全部软删除的数据,而生成的SQL语句却是:UPDATE table_name  SET  delete_time =NULL  WHERE  delete_time  IS NULLSQL语句中的WHERE 中字段的值判断部分:IS NULL 是不对的,应该是 IS NOT NULL 才对。因为软删除字段是有值的,才需要置NULL。

2. 如果给该方法传递了参数:条件,则生成的SQL语句成了:UPDATE table_name SET  delete_time  =  NULL WHERE delete_time  IS NULL AND  id  = 1005 显然:WHERE 中的 IS NULL是自动添加上的。
我认为这里,应该改为:IS NOT NULL 才对?

请指正!
评论(
后面还有条评论,点击查看>>