Laravel触发多级关系的软删除
我试图删除一个父记录,然后删除一个多级关系 我有3个表:账户->服务->服务项目 删除帐户时,我希望删除服务以及与该服务相关的所有服务项目 在我的帐户模型中,我有以下代码Laravel触发多级关系的软删除,laravel,soft-delete,Laravel,Soft Delete,我试图删除一个父记录,然后删除一个多级关系 我有3个表:账户->服务->服务项目 删除帐户时,我希望删除服务以及与该服务相关的所有服务项目 在我的帐户模型中,我有以下代码 public function delete() { $this->services()->delete(); return parent::delete(); } 这是有效的,当帐户被删除时,所有相关的服务都会被删除,但服务项目不会被删除 我的服务模型中有以下功能 public function
public function delete()
{
$this->services()->delete();
return parent::delete();
}
这是有效的,当帐户被删除时,所有相关的服务都会被删除,但服务项目不会被删除
我的服务模型中有以下功能
public function delete()
{
$this->service_items()->delete();
return parent::delete();
}
当我删除帐户时,似乎没有触发此功能。我知道我可以循环服务并删除每个服务项目,但我想知道是否有一种方法可以触发服务模型中的delete函数
注意:如果我直接删除一项服务,服务项目将被删除。好的,下面是解决方案。 您不应该单独删除每个服务项,而应该通过在模型下声明booted方法来使用Laravel的钩子概念 Account.php
<?php
class Account extends Model
{
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted()
{
static::deleted(function($account) {
$account->services()->delete();
});
}
/**
* List of services associated with an account.
*/
public function services()
{
// or you may have some other relationship
return $this->hasMany('App\Service');
}
}
<?php
class Service extends Model
{
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted()
{
static::deleted(function($service) {
$service->items()->delete();
});
}
/**
* List of items associated with an account.
*/
public function items()
{
// or you may have some other relationship
return $this->hasMany('App\ServiceItem');
}
}
您可能想看看这个使用观察者在CRUD的基础上触发事件。