我有一个型号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(); });