【发布时间】:2020-09-03 18:13:33
【问题描述】:
有很多相关的问题,但很遗憾我找不到有效的解决方案
我有 Laravel 模型,当这个模型被删除时我想要
- 删除部分相关模型
- 删除模型时运行自定义 SQL 查询
我的 Laravel 的模型类看起来像(你可以看到模型可以有不同的关系类型)
class ModelA extends Model
{
public functions modelsB() {
return $this->hasMany(ModelB:class);
}
public functions modelsC() {
return $this->belongsToMany(ModelC:class);
}
// other related models
// place where I am expecting actual deleting is happening
public static function boot() {
parent::boot();
self::deleting(function($modelA) {
$modelA->modelsB()->get()->each->delete();
foreach($modelA->modelsC as $modelC){
$modelC->delete();
}
});
}
}
ModelA 已删除,但所有相关数据仍保留,我不确定它是否被调用。也许我错过了什么?我应该为我的 ModelA 扩展一些课程吗?还是这个引导函数应该放在别的地方?
【问题讨论】:
-
为什么不直接覆盖删除方法?
-
设置外键在删除时级联是一种选择,如果您还没有尝试过的话。
-
我想在声明模型关系的地方继续删除逻辑
-
你试过
$modelA->modelsB()->delete()和$modelA->modelsC()->delete()吗? -
您检查过
deleting实际触发的事件吗?通过调试器或logger()->debug()或其他方式。
标签: laravel eloquent cascading-deletes