我有一个模型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
而不是?...)
答案 0 :(得分:1)
对于Many To Many relationship,function filter_input_fix ($type, $variable_name, $filter = FILTER_DEFAULT, $options = NULL )
{
$checkTypes =[
INPUT_GET,
INPUT_POST,
INPUT_COOKIE
];
if ($options === NULL) {
// No idea if this should be here or not
// Maybe someone could let me know if this should be removed?
$options = FILTER_NULL_ON_FAILURE;
}
if (in_array($type, $checkTypes) || filter_has_var($type, $variable_name)) {
return filter_input($type, $variable_name, $filter, $options);
} else if ($type == INPUT_SERVER && isset($_SERVER[$variable_name])) {
return filter_var($_SERVER[$variable_name], $filter, $options);
} else if ($type == INPUT_ENV && isset($_ENV[$variable_name])) {
return filter_var($_ENV[$variable_name], $filter, $options);
} else {
return NULL;
}
}
是正确的方法,但您还需要一个数据透视表来存储链接。
答案 1 :(得分:1)
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
来获取整个工作模型列表。像魅力一样!
答案 2 :(得分:0)
这只是为了增加任何在同一问题上寻找解决方案的人,涉及同一模型。
在这里,您可以创建一个具有普通 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');
}