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

标签 php laravel many-to-many relationship

我有一个模特Job

Job 可以要求其他 Jobs 完成后才能开始。

一个 Job 可能同时是许多 Jobs 的必备作业。

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

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

class Job extends Model
{

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

但是,我发现如果我创建一个 Job D 并让它需要 Job BJob 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) 时,会发生几件事:

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

像魅力一样工作!

关于php - 同一模型上的 Laravel 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205742/

相关文章:

php - jquery post() 不以动态形式工作

javascript - 当文本字段用 jquery 填充一定字符数时的操作

mysql - mysql中递归一对多的多对多关系是否需要至少4个表?

php - 如何在 opencart 产品中设置自定义价格?

php - php MySQL多表显示

php - 登录laravel试图获取非对象的属性

php - Laravel 验证自定义消息

php - 插入数据库表时发出通知声音

database - 如何为多对多关系创建 initial_data Json fixture?

c# - Linq 多对多包括