2014-09-23 16 views
6

Ho un post modello che ha una relazione hasMany ('Commenti'). Vorrei recuperare tutti i post con la relazione Commenti, ma solo l'ultimo commento per ogni post. E poiché ci sono migliaia di post con migliaia di commenti ciascuno, un'opzione come questa non è possibile a causa di problemi di prestazioni (ad es. Caricare tutti i commenti per ogni post e quindi fare $ post-> commenti [0] -> valore):Limitazione delle relazioni in Laravel

Post::with('comments' => function($query){ 
    $query->orderBy('created_at','desc') 
}); 

Né posso fare:

Post::with('comments' => function($query){ 
    $query->orderBy('created_at','desc')->limit(1) 
}); 

come questo semplicemente non funziona.

Sono assolutamente sicuro di non essere il solo con questo problema e sono riuscito a trovare alcuni "tentativi di soluzione" ma non un esempio stabile di codice funzionante. Qualcuno può aiutare, per favore?

+2

duplicati di http://stackoverflow.com/questions/24343738/getting-just-the-latest-value-on-a-joined-table -con-eloquenti # 24.350.807. Dai un'occhiata anche a http://softonsofa.com/tweaking-eloquent-relations-how-to-get-latest-related-model/ –

+0

Brillante, ci proverò stasera. Se vuoi puoi postarlo come risposta in modo che io possa contrassegnarlo come la migliore risposta :) –

risposta

2

prova questo: diciamo che hai definito la relazione "commenti" sul tuo modello Post. questo è come si può prendere tutti i commenti appartengono a quella:

App\Post::all()->comments()->orderBy('comments.created_at')->take(1)->get();