2017-01-27 2 views
0

Ich versuche, die neuesten 5 Zeilen für jeden Fremdschlüssel in einer Tabelle abzurufen, so stellen Sie sich die folgenden Datenbankstruktur:Laravel Querybuilder - Wählen Sie N Zeilen für jeden Fremdschlüssel

CATEGORY (id, name) 
ARTICLE (id, category_id, title) 

Ich mag etwas wollen dies:

Article::where("category_id", 1) 
     -> latest() 
     -> limit(5) 
     -> get(); 

Article::where("category_id", 2) 
     -> latest() 
     -> limit(5) 
     -> get(); 

Und so weiter. Wie würde ich dies als eine einzige Abfrage für alle Fremdschlüssel tun?

Danke!

Antwort

0

Sie können dies tun:

Category::with(['article' => function($q){ 
     $q->orderBy('id', 'desc'); 
     $q->limit(5); 
    })->get(); 

Natürlich benötigen Sie Fremdschlüsselbeziehungen in Ihren Modellen zu schaffen, um diese Funktion zu nutzen.

Hier ist die Dokumentation, wie Beziehungen zu erstellen: https://laravel.com/docs/5.4/eloquent-relationships#one-to-many

+0

Scheint nicht richtig zu funktionieren. Ich habe dies meinem Kategoriemodell hinzugefügt: public function articles() {return $ this -> hasMany (Article :: class); } , aber ich bekomme nur Datensätze für den 4. Fremdschlüssel? – John1984

+0

Sie sollten alle Kategorien mit 'article()' Eigenschaft erhalten, wo Artikel – Buglinjo

+0

sein werden Tut mir leid, ich habe immer noch Probleme. Was sollte die Beziehungsmethode in meinem Kategoriemodell sein? – John1984

Verwandte Themen