2017-07-19 13 views
2

私はこの問題をlaravelの 'eager loading'としています。Laravel eager loading 4 tables

お互いに関連する4つのテーブルを扱っています。

私は、これらのモーダルています

<?php 
class AgendaPersonalModel extends Model 
{ 
    protected $table = 'agenda_personal'; 

    public function periods() { 

     return $this->hasMany(AgendaPersonalPeriodModel::class, 'agenda_id'); 

    } 
} 
?> 

class AgendaPersonalPeriodModel extends Model 
{ 
    protected $table = 'agenda_personal_period'; 


     public function weekdays() { 

     return $this->hasMany(AgendaPersonalWeekdaysModel::class, 'period_id'); 

    } 

<?php 
class AgendaPersonalWeekdaysModel extends Model 
{ 
    protected $table = 'agenda_personal_weekdays'; 


    public function breaks() { 

     return $this->hasMany(AgendaPersonalBreakModel::class, 'weekday_id'); 

    }  

} 
?> 

<?php 
class AgendaPersonalBreakModel extends Model 
{ 
    protected $table = 'agenda_personal_breaks'; 
} 

?> 

は今、私は1つのオブジェクト内のすべてのデータを '取得' したいと思います。

私はこれを行うとき:

$agendaTest = AgendaPersonalModel::with(array('periods', 'periods.weekdays'))->where('id', 1)->first(); 

をそれはPERFECT

に動作しますが、私はこれを行うとき:

(1/1) RelationNotFoundException 
Call to undefined relationship [weekdays] on model [App\Models\AgendaPersonalModel]. 
in RelationNotFoundException.php (line 20) 
+0

を行うことができますAgendaPersonalModel' 'で定義された平日の関係を持っていますか?それとも、「期間。週末。ブレーク」をすることを意味しましたか? – Josh

+0

彼はジョシュ、それは行うために降りる: 'periods.weekdays.breaks' –

答えて

2

あなたはこの

$agendaTest = AgendaPersonalModel::with(['periods', 'periods.weekdays.breaks'])->where('id', 1)->first(); 
+0

これは動作しません。ネストされたeagerローディングは、1または2レベルの関係でのみ機能します。 –

+0

偉大な、私は前にこのような何かを試したが、私は今私の間違いを参照してください。私の場合、これは最高の解決策です。thnks ALOT –

0

の操作を行います。

$agendaTest = AgendaPersonalModel::with(array('periods', 'periods.weekdays', 'weekdays.breaks'))->where('id', 1)->first(); 

を私は次のエラーを取得しますthis:

AgendaPersonalModel::with(['periods', 'periods.weekdays' => function ($q) { 
     $q->with('breaks'); 
    }])->find(1); 
+1

働く! :)、ありがとうALOT –

関連する問題