【发布时间】:2017-08-03 13:43:15
【问题描述】:
我有这个模型,它使用静态启动来删除数据库中的相关模型/表。 首先是产品型号。
protected static function boot() {
parent::boot();
static::deleting(function($product) {
$product->hearts()->delete();
$product->comments()->delete();
});
}
它会删除红心和 cmets,它的作用就像一个魅力。但问题是我有这个回复模型,它与我的评论模型有关系,并且回复模型是从评论模型中引用的
public function replies()
{
return $this->hasMany("App\Reply");
}
然后在我的评论模型中,我使用另一个静态引导来“链接”产品中的引导删除
protected static function boot() {
parent::boot();
static::deleting(function($comment) {
$comment->replies()->delete();
});
}
但它不起作用。你们能告诉我为什么这不起作用吗?从逻辑上讲,它应该可以工作,因为评论正在被删除。谢谢。
【问题讨论】:
-
不,我不想做一个 foreach 循环,因为这对大数据需要太多的处理。
-
我认为 Laravel 甚至不会构造它删除的模型,因此它也不会调用
static::deleting方法..您还必须删除产品::deleting中的评论回复。 -
这行不通。 $product->cmets()->replies()->delete();有任何想法吗?不诉诸foreach?
-
如果您使用的是 mysql,请尝试使用
on delete cascade,这是在您从父表中删除数据时,外键从子表中删除数据的参考操作。链接:mysqltutorial.org/mysql-on-delete-cascade -
嗯.. 我们在 MySQL 或您在工作中使用的任何 db 中使用级联删除.. 我认为如果没有循环它就无法工作:/