Thinkphp8中的destroy和平时用的 delete 删除有什么区别

      发布在:后端技术      评论:0 条评论

authRule::destroy(['id'=>$id]) 和平时用的 delete 有以下区别:

  1. destroy() 是模型的静态方法,可以直接调用,内部会实例化模型再删除
  2. delete() 是实例方法,需要先查询出模型实例再调用

让我查看下平时项目中 delete 的用法来对比:
destroy() vs delete() 的区别:

方法类型调用方式适用场景
destroy()静态方法Model::destroy($condition)根据条件直接删除,无需先查询
delete()实例方法$model->delete()先查询出模型实例后删除

代码对比:

// 方式1:destroy() - 静态调用,内部自动实例化
authRule::destroy(['id'=>$id]);

// 方式2:delete() - 先查询再删除
$rule = authRule::find($id);
$rule->delete();

// 方式3:数据库 delete - 直接操作表
Db::name('authRule')->where('id', $id)->delete();

区别详解:

  1. 事件触发

    • destroy()delete() 都会触发模型事件(before_deleteafter_delete
    • Db::name()->delete() 不会触发模型事件
  2. 软删除支持

    • 如果模型启用了软删除(SoftDelete trait),destroy()delete() 只会标记 delete_time
    • Db::name()->delete()真删除数据
  3. 性能

    • destroy() 内部会先查询再删除,多一次数据库查询
    • Db::name()->delete() 直接执行 SQL,性能更高


相关文章
热门推荐