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 才对?
请指正!
