同一模型上的 Laravel 多对多关系

Rai*_*l24 3 php many-to-many relationship laravel

我有一个模型Job

AJob可以要求Jobs先完成其他任务才能开始。

A可能是许多人同时Job需要的工作。Jobs

所以,说Job A取决于Job BJob C,我希望能够打电话job->requiredJobs并获得这两项工作。

就目前情况而言,我有以下几点:

class Job extends Model
{

    public function requiredJobs() 
    {
        return $this->hasMany('App\Job', 'required_job_id');
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我发现如果我创建一个Job D并拥有它 require Job Band Job C,它会覆盖 的Job Arequired jobs 字段,因为它似乎添加required_job_id到所需的作业上,而不是在依赖的作业上创建一个数组。

希望这一切都有道理!我不完全确定我是否需要两个定义,或者是否hasMany是错误的关系(belongsToMany相反?...)

Rai*_*l24 5

尼克的回答将我推向了正确的方向。

以下是我最终定义模型的方式:

class Job extends Model
{

    public function requiredJobs() 
    {
        return $this->belongsToMany('App\Job', null, 'dependent_job_ids', 'required_job_ids');
    }

    public function dependentJobs() 
    {
        return $this->belongsToMany('App\Job', null, 'required_job_ids', 'dependent_job_ids');
    }
}
Run Code Online (Sandbox Code Playgroud)

这意味着当我打电话时dependentJob->requiredJobs()->save(requiredJob),会发生一些事情:

  1. dependentJob获取 ID 数组required_job_ids,我可以调用dependentJob->requiredJobs以获取工作模型的完整列表。
  2. requiredJob获取 ID 数组dependent_job_ids,我可以调用requiredJob->dependentJobs以获取工作模型的完整列表。

奇迹般有效!