2016-03-29 77 views
1

繼承人我在做什麼。Laravel 5.2渴望loading加載中沒有工作

$question = ForumQuestion::where('link',$ques)->with('answers')->first(); 
$answers = $question->answers; 
$answers->load('user'); 
//return $answers; 
return view('forum.question', compact('question','answers')); 

$answers->load('user');急切加載答案的相應用戶。

public function user() 
    { 
     if ($this->user_type == 'student') { 
      return $this->belongsTo(Student::class, 'user_id'); 
     }else{ 
      return $this->belongsTo(Teacher::class, 'user_id'); 
     } 
    } 

但問題是$ this-> user_type得到某種靜態。如果我的第一個答案有user_type = 'teacher',那麼在假設它爲teacher的每個查詢中,即使它的某些時間改變爲student。 爲什麼它是靜態的?如果我不急於加載,效果很好。

+0

爲什麼你不嘗試做嵌套的急切加載'$ question = ForumQuestion :: where('link',$ ques) - > with('answers.user') - > first();'這會得到用戶急於加載的所有答案 –

+0

@FabioAntunes嵌套的急切加載會導致null'user',因爲在嵌套熱切加載時,查詢先構建然後執行。這導致$ this爲null,因此不會有'$ this-> user_type',這會使if語句始終爲false,並導致錯誤或空用戶。 – jovanpreet

+0

這是因爲你正在以錯誤的方式定義你的關係,看看[多態關係](https://laravel.com/docs/master/eloquent-relationships#polymorphic-relations) –

回答

0

如果你改變你的渴望加載到兩個不同的範疇,而不是把一切彙集成用戶功能

public function student() { 
     return $this->belongsTo(Student::class, 'user_id'); 
    } 

public function teacher() { 
     return $this->belongsTo(Teacher::class, 'user_id'); 
    } 

,只是如果你真的想如果語句來完成的,從不同的功能,例如叫它作爲用戶。希望有所幫助。

+0

我知道這會工作,但這真的是一個很好的答案嗎?查詢將翻倍。因爲user_id屬於教師或學生,因此其中一個將被額外查詢。 – jovanpreet