删除数据

使用查询构造器删除数据

在利用查询构造器执行删除数据操作时,首先要确保引入了门面类:

use think\facade\Db;

根据主键删除

可以直接在 delete 方法中传入主键值或主键值数组来删除数据:

// 删除主键为1的数据
Db::table('think_user')->delete(1);
// 删除主键为1、2、3的数据
Db::table('think_user')->delete([1,2,3]);

上述代码最终生成的SQL语句可能是:

DELETE FROM `think_user` WHERE  `id` = 1 
DELETE FROM `think_user` WHERE  `id` IN (1,2,3) 

条件删除

通过 where 方法设置删除条件:

// 删除id为1的数据
Db::table('think_user')->where('id',1)->delete();
// 删除id小于10的数据
Db::table('think_user')->where('id','<',10)->delete();

对应生成的SQL语句可能是:

DELETE FROM `think_user` WHERE  `id` = 1 
DELETE FROM `think_user` WHERE  `id` < 10

delete 方法返回影响数据的条数,如果没有删除任何数据则返回0。

无条件删除所有数据

如果不带任何条件调用 delete 方法会提示错误。若确实需要删除所有数据,可以使用以下方式:

// 无条件删除所有数据
Db::name('user')->delete(true);

此时最终生成的SQL语句为(删除了表的所有数据):

DELETE FROM `think_user`

但一般情况下,出于业务数据安全考虑,不建议真实删除数据,系统提供了软删除机制(在模型中使用软删除更为方便)。

软删除数据

软删除是使用特定字段标记数据已被删除,而非真正从数据库中删除:

// 软删除数据 使用delete_time字段标记删除
Db::name('user')
    ->where('id', 1)
    ->useSoftDelete('delete_time',time())
    ->delete();

实际生成的SQL语句可能如下(执行的是 UPDATE 操作):

UPDATE `think_user`  SET `delete_time` = '1515745214'  WHERE  `id` = 1

其中,useSoftDelete 方法表示使用软删除,并且指定软删除字段为 delete_time,写入的数据为当前的时间戳。

目录
设置
主题设置
深色模式
字体设置
字体大小
16