2017-01-14 5 views
0

Ich habe diese Abfrage in Laravel bekam, die alle Foren mit einigen zusätzlichen Informationen ist der Rückkehr:Laravel erhalten einen Wert von eifrigen Last

return Forum::with(['messages.user' => function($query){ 
    $query->select('id', 'name'); 
}])->withCount('messages')->paginate(10); 

aber jetzt ist es bestrebt, lädt alle zugehörigen Nachrichten als gut, aber ich brauche nur den Autor von einer Nachricht. Wie könnte ich dieses Ergebnis bekommen?

+0

Ich denke, dass Sie dafür nicht eifrig laden können. –

Antwort

0

Ohne eifrig Laden,

// für ein bestimmtes Forum

// ein Forum Einheit Get

$forum = Forum::find($id); 

// seine Nachrichten als Sammlung Get

$forumMessages = $forum->messages; 

// Iteriere über jede Nachricht in der Sammlung, um ihren Autor zu finden. Dies sucht nach ID im Benutzermodell basierend auf der von Ihnen in der Nachrichtentabelle gespeicherten 'author_id'. Die Sammlung $ forumMessages hat nun den Namen des Autors. Dies ist nur um dir eine Idee zu geben. Strukturieren Sie entsprechend Ihren Bedürfnissen.

$forumMessages->each(function ($message){ 
    $message->author = User::find($message->author_id)->name; 
}); 
0

Versuchen

return Forum::with([ 
    'messages' => function ($messages) { 
     return $messages->with([ 
      'user' => function ($user) { 
       return $user->select('id', 'name'); 
      } 
     ])->select('id', 'author'); // you get author from messages 
    } 
])->withCount('messages')->paginate(10); 

dies auch eifrig Lasten verwenden, aber nur id und author bekommen. id wird benötigt, um die Beziehung mit dem Benutzer herzustellen.

+0

Das sieht die beste Lösung aus. Aber es gibt einen Fehler aus: '' 'SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'Name' in 'Feldliste' (SQL: Wählen Sie 'ID',' Name' von 'Nachricht' wo' Nachricht' forum_id' in (1, 2)) '' ' – Jenssen

+0

Der Fehler zeigt an, dass Sie versuchen,' name' aus der 'massage' Tabelle zu bekommen. Überprüfen Sie, ob Sie dort ein solches Feld haben. – Gayan

+0

Ja, es ist wegen der letzten '' -> wählen ('id', 'author'); '' 'wenn ich entferne, dass es funktioniert, aber es lädt alle Nachrichten aswel. Das versuche ich zu verhindern. – Jenssen

0

die Tabelle für Ihr Message Modell Sie haben Vorausgesetzt ist messages und dass es die Spalten forum_id und user_id, und die Tabelle für Ihr User Modell hat, ist users Sie könnten nur eine belongsToMany definieren und die Informationen, die Art und Weise erhalten:

public function users() 
{ 
    return $this->belongsToMany(User::class, 'messages')->distinct(); 
} 

dann:

return Forum::with(['users' => function($query){ 
    $query->select('users.id', 'users.name'); 
}])->withCount('messages')->paginate(10); 

hoffe, das hilft!

Verwandte Themen