Laravel 开机方式

Laravel boot method

在我的模型中,我设置了引导方法,因此当我软删除记录时,相关记录也会被软删除。像这样:

Company.php

protected static function boot()
    {
        parent::boot();
        static::deleting(function($company) {
            $company->department()->delete();
        });
    }

Department.php:

 protected static function boot()
    {
        parent::boot();
        static::deleting(function($department) {
            dd('test');
        });
    }

所以当我想软删除公司时,部门也应该被软删除。但是当我在static::deleting(Department.php)中dd时,这个是达不到的。当我 dd 这样时:

Department.php

protected static function boot()
    {
        parent::boot();
        dd('test');
        static::deleting(function($department) {
        });
    }

结果是test

我做错了什么?

将此添加到您的 Company.php 模型中:

public function departments()
{
    return $this->hasMany('App\Department');
}

将此添加到您的 Department.php 模型中:

public function company()
{
    return $this->belongsTo('App\Company');
}

更新 Company.php 中的启动方法以供参考

$company->departments()->delete()

那你应该把Department.php文件中的boot方法去掉,不需要这个

在公司模型中:

  1. 描述公司与部门的关系:
public function departments(){
    return $this->hasMany(Department::class);
}
  1. 迭代每个部门以在公司模型中的方法 boot() 中删除:
protected static function boot(){
    parent::boot();
    static::deleting(
        function($company){
        $company->departments()->
            each(fn($department)=>$department->delete());
    });
}

部门模型中:描述部门与公司的关系

public function company(){
    return $this->belongsTo(Company::class);
}