如何将Laravel模型引导"deleting"方法包含在数据库事务中,并删除主模型?



我有一个型号Agent,它有很多agent accounts

public function agentAccounts(): Relation
{
return $this->hasMany(AgentAccount::class);
}

我想在一个事务中删除它们,但使用boot方法

public static function boot()
{
parent::boot();
self::deleting([self::class, 'onDeleting']);
}

我理解,当我在";on删除";类似的功能

public static function onDeleting(self $model): void
{
DB::transaction(function () use ($model) {
$agentAccounts = $model->agentAccounts;
foreach ($agentAccounts as $agentAccount) {
/* @var $agentAccount AgentAccount */
$agentAccount->delete();
}            
}, 5);
}

数据库事务不包括删除代理本身。它位于代理删除数据库事务之前。在我的情况下,由于某些与agentAccounts无关的SQL级别限制,代理删除可能会失败如果我使用上面的例子,我可能会删除所有的agentAccount,但保留Agent。

我不希望发生这种事。

我希望它们要么一起删除,要么一起保留。

我该怎么做?

我相信DB事件是在阻塞模式下运行的,所以在模型上调用delete()时,在事务内部执行就足够了,就像一样

DB::transaction(function () use($user) { $user->delete(); });

最新更新