2016-03-29 4 views
1

Heres, was ich tue.Laravel 5.2 eifrig Laden keine funktioniert

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

die $answers->load('user'); eifrig Lasten Benutzer der Antwort entspricht.

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

Aber Problem ist $ this-> user_type bekommt eine Art von statischen. Wenn meine erste Antwort user_type = 'teacher' hat, dann nimmt es in jeder Abfrage an, wie es teacher ist, obwohl es einige Zeit zu student ändert. Warum ist es statisch? Wenn ich nicht eifrig lade, funktioniert es gut.

+0

Warum versuchen Sie nicht, verschachtelt eifrig zu laden '$ question = ForumQuestion :: wo ('link', $ ques) -> mit ('answers.user') -> first();' dies wird alle Ihre Antworten mit den Benutzern eifrig geladen –

+0

@FabioAntunes verschachteltes eifriges Laden resultiert in Null 'Benutzer' wie zum Zeitpunkt des verschachtelten eifrigen Ladens werden Anfragen zuerst gebaut dann ausgeführt. Dies führt dazu, dass $ this auf null gesetzt wird, und daher würde es nicht $ this-> user_type geben, was if-Anweisung immer false und als Ergebnis false oder null user macht. – jovanpreet

+0

Das ist, weil Sie Ihre Beziehung in der falschen Weise definieren, werfen Sie einen Blick auf [polymorphe Beziehungen] (https://laravel.com/docs/master/eloquent-relationships#polymorphic-relations) –

Antwort

0

Was passiert, wenn Sie Ihre eifrigen Laden in zwei verschiedene Kategorien statt alles zusammen Funktion in den Anwender setzen ändern

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

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

und nur, wenn Sie wirklich eine if-Anweisung tun wollen, rufen Sie es aus einer anderen Funktion, wie beispiels als Benutzer. Ich hoffe, das hilft.

+0

Ich weiß, das wird aber funktionieren Ist das wirklich eine gute Antwort? Die Anfragen werden verdoppelt. Da die user_id entweder dem Lehrer oder dem Schüler gehört, wird einer von ihnen extra abgefragt. – jovanpreet