Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel触发多级关系的软删除_Laravel_Soft Delete - Fatal编程技术网

Laravel触发多级关系的软删除

Laravel触发多级关系的软删除,laravel,soft-delete,Laravel,Soft Delete,我试图删除一个父记录,然后删除一个多级关系 我有3个表:账户->服务->服务项目 删除帐户时,我希望删除服务以及与该服务相关的所有服务项目 在我的帐户模型中,我有以下代码 public function delete() { $this->services()->delete(); return parent::delete(); } 这是有效的,当帐户被删除时,所有相关的服务都会被删除,但服务项目不会被删除 我的服务模型中有以下功能 public function

我试图删除一个父记录,然后删除一个多级关系

我有3个表:账户->服务->服务项目

删除帐户时,我希望删除服务以及与该服务相关的所有服务项目

在我的帐户模型中,我有以下代码

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的基础上触发事件。