2017-01-17 4 views
-1

Ich habe diese Abfrage in Laravel bekam:Laravel Abfrage eifrig Last

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

Diese alle Benutzer zurückgibt, die eine Nachricht in einem Forum gepostet haben.

Auf meinem Forum Modell habe ich diese Beziehungen:

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


public function messages() 
{ 
    return $this->hasMany(Message::class); 
} 

ich nur den neuesten Benutzer erhalten mag, die eine Nachricht geschrieben hat. Wie könnte ich das tun?

+0

Ich denke Forum hat eine Beziehung mit Nachrichten, richtig? –

+0

Können Sie Ihre Tabellenstruktur posten? – Paras

+0

Ja, ein Forum '' 'hat viele Nachrichten''' Ich habe meine Frage geändert. – Jamie

Antwort

1

Sie können den letzten Benutzer, indem sie Nachrichten Beziehung abrufen, versuchen Sie dies:

return Forum::with(['messages' => function($query){ 
    $q->orderBy('created_at', 'desc'); 
},'messages.users'])->first(); 
+0

Das gibt folgendes zurück: '' 'SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'messages.created_at' in 'Auftragsklausel' (SQL: wähle * aus' user' aus, wo 'user'.id' in (1 , 2) order by 'messages'.created_at' desc)' '' – Jamie

+0

@Jamie schau mal rein –

0

Verwenden has() Verfahren und die Reihenfolge von created_at in absteigender Reihenfolge.

User::has('forums.messages')->orderBy('created_at','desc')->first(); 
+0

Aber dann gibt es die Foren nicht mehr zurück. – Jamie

+0

@Jamie verwenden 'mit ('Foren') -> hat ('Foren.Messages')' dann. –

Verwandte Themen