authRule::destroy(['id'=>$id]) 和平时用的 delete 有以下区别:
- destroy() 是模型的静态方法,可以直接调用,内部会实例化模型再删除
- 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();区别详解:
事件触发:
destroy()和delete()都会触发模型事件(before_delete、after_delete)Db::name()->delete()不会触发模型事件
软删除支持:
- 如果模型启用了软删除(
SoftDeletetrait),destroy()和delete()只会标记delete_time Db::name()->delete()会真删除数据
- 如果模型启用了软删除(
性能:
destroy()内部会先查询再删除,多一次数据库查询Db::name()->delete()直接执行 SQL,性能更高
相关文章