我有一个模特Job
。
Job
可以要求其他 Jobs
完成后才能开始。
一个 Job
可能同时是许多 Jobs
的必备作业。
所以,说 Job A
取决于 Job B
和 Job C
,我希望能够调用 job->requiredJobs
并获得这两个工作。
就目前而言,我有以下几点:
class Job extends Model
{
public function requiredJobs()
{
return $this->hasMany('App\Job', 'required_job_id');
}
}
但是,我发现如果我创建一个 Job D
并让它需要 Job B
和 Job C
,它会覆盖 Job A
的必需作业字段,因为它似乎将 required_job_id
添加到必需作业中,而不是在依赖作业上创建数组。
希望这一切都有意义!我不完全确定是否需要两个定义,或者 hasMany
是否是错误的关系(改为 belongsToMany
?...)
最佳答案
Nick的回答把我推向了正确的方向。
这是我最终定义模型的方式:
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');
}
}
这意味着当我调用 dependentJob->requiredJobs()->save(requiredJob)
时,会发生几件事:
dependentJob
得到一个 ID 数组required_job_ids
,我可以调用dependentJob->requiredJobs
来获取作业模型的完整列表。requiredJob
得到一个 ID 数组dependent_job_ids
,我可以调用requiredJob->dependentJobs
来获取作业模型的完整列表。
像魅力一样工作!
关于php - 同一模型上的 Laravel 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205742/