2016-03-24 28 views
0

私はモデルJobを持っています。同じモデルのLaravel多対多関係

Jobは、開始する前に他のJobsを完了する必要があります。

Jobは、一度に多数のJobsの必須ジョブになる可能性があります。

Job AJob BJob Cに依存しており、job->requiredJobsに電話してその2つのジョブを取得したいと考えています。

現状では、私は次のようしている:

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は?...)Many To Many relationshipについては

答えて

0

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. ​​3210はIDがrequired_job_idsの配列を取得し、I dependentJob->requiredJobsに電話して、ジョブモデルのリスト全体を取得することができます。
  2. requiredJobはIDdependent_job_idsの配列を取得し、requiredJob->dependentJobsを呼び出してジョブモデルのリスト全体を取得できます。

魅力的な作品です!

1

は、belongsToMany()が正しい方法ですが、あなたはまた、ピボットテーブルにする必要がありますリンクを保存します。