我有一个型号Job
。
一个Job
可能需要完成其他Jobs
才能开始。
一个CCD_ 4可以是同时用于许多CCD_。
所以,假设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 jobs字段,因为它似乎是在将required_job_id
添加到所需的作业上,而不是在依赖作业上创建一个数组。
希望这一切都有意义!我不完全确定我是否需要两个定义,或者hasMany
是否是错误的关系(而不是belongsToMany
?…)
以下是我最终如何定义我的模型:
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
得到一个IDrequired_job_ids
的数组,我可以调用dependentJob->requiredJobs
来得到整个作业模型列表requiredJob
得到一个ID数组dependent_job_ids
,我可以调用requiredJob->dependentJobs
来得到整个作业模型列表
工作起来很有魅力!
对于多对多关系,belongsToMany()
是正确的方法,但您也需要一个数据透视表来存储链接。
这只是为了增加任何在同一问题上寻找解决方案、关联同一模型的人。
在这里,您可以创建一个具有正常Many to Many
关系的联接表,并将ID附加为正常Laravel关系
public function requiredJobs()
{
return $this->belongsToMany('App'Job','dependent_jobs_required_jobs','dependent_job_ids','required_job_ids');
}
public function dependentJobs()
{
return $this->belongsToMany('App'Job','dependent_jobs_required_jobs','required_job_ids','dependent_job_ids');
}