删除数据
使用查询构造器删除数据
在利用查询构造器执行删除数据操作时,首先要确保引入了门面类:
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
,写入的数据为当前的时间戳。