laravel - Laravel 在多级关系上触发软删除
问题描述
我正在尝试删除父记录,然后删除多级关系。
我有 3 个表:帐户 -> 服务 -> service_items
当我删除一个帐户时,我希望删除服务以及与该服务相关的所有 service_items。
在我的帐户模型中,我有以下代码
public function delete()
{
$this->services()->delete();
return parent::delete();
}
这是有效的,当帐户被删除时,所有相关服务都会被删除,但服务项目不会被删除。
我的服务模型中有以下功能
public function delete()
{
$this->service_items()->delete();
return parent::delete();
}
删除帐户时似乎没有触发此功能。我知道我可以遍历服务并删除每个 service_item 但我想知道是否有办法在服务模型中触发删除功能?
注意:如果我直接删除服务,则会删除 service_items
解决方案
好的,所以这是解决方案。与其单独删除每个 service_item,不如使用 Laravel 的钩子的概念,在模型下声明 booted 方法
账户.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
<?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');
}
}
因此,每当您删除一个帐户时,它将删除与该帐户关联的所有服务,进而删除与每个服务关联的所有服务项目。
推荐阅读
- sml - 错误 SML:错误:未绑定的变量或构造函数:valof
- android - :app:generateCrashlyticsSymbolFileRelease 错误:generateCrashlyticsSymbolFileRelease 所需的未剥离本机库路径不存在:
- kotlin - 检查其中一个值是否包含换行符
- javascript - 从选项选择列表 Html-javascript 中删除一些“选项”
- node.js - 我如何将 MongoDB 聚合匹配用于数组以使用分页
- scala - 初始化演员系统wavesplatform com.protonail.leveldb.jna.LevelDBException时出错
- php - 如何在这个调试案例中用 php 7.4 交换参数?- 加入()
- python - python是否会在“if and”中的第一个错误条件下停止验证,还是在决定之前检查所有内容?
- c - 比较文件中的字符串和 C 中的 malloced 字符串
- angular - Angular 10 应用程序中的安全标头失败