Laravel 同一模型上的多对多关系
Laravel many-to-many relationship on the same model
我有一个模型Job
。
A 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
?...)
对于 Many To Many relationship,belongsToMany()
是正确的方法,但您还需要一个枢轴 table 来存储链接。
的回答把我推向了正确的方向。
以下是我最终定义模型的方式:
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
获取整个工作模型列表。
很有魅力!
这只是为了补充任何在同一问题上寻找解决方案的人,涉及相同的模型。
您可以在此处创建具有正常 Many to Many
关系的加入 table 并像正常 Laravel 关系一样附加 ID
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');
}
我有一个模型Job
。
A 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
?...)
对于 Many To Many relationship,belongsToMany()
是正确的方法,但您还需要一个枢轴 table 来存储链接。
以下是我最终定义模型的方式:
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
获取整个工作模型列表。
很有魅力!
这只是为了补充任何在同一问题上寻找解决方案的人,涉及相同的模型。
您可以在此处创建具有正常 Many to Many
关系的加入 table 并像正常 Laravel 关系一样附加 ID
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');
}