2017-12-05 6 views
1

Ich verstehe, dass diese Frage mehr als eine DBMS-bezogene Antwort haben kann, aber vielleicht nicht, also hier geht es.Laravel (Eloquent) Äquivalent von Mongoose populate() -Methode

Also, ich brauche meine App asynchron einige Daten aus dem Back-End zu greifen, sagen so etwas wie eine User und seine Posts. Ich verwende Vue2 mit Axios auf dem Frontend, so dass es schön wäre, wie etwas zu schreiben:

mounted: function() { 
    axios.get('/users') 
     .then((response) => { 
      this.users = response.data; 
     }) 
     .catch(function (err) { 
      // Handle this 
     }); 
} 

Das Resultat, das ich Objekt haben möchte ist das users in meinem VueVM Daten auch eine Reihe von enthalten posts für jeden User. Derzeit baue ich eine benutzerdefinierte assoziatives Array in meinem Back-End-Seite-Controller wie folgt:

$posts = Post::where('user_id', $id)->get(); 
return json_encode(['user' => $user, 'posts' => $posts]); 

Oder wenn dies möglich ist, verwende ich die has_many Methode, die auch ziemlich praktisch ist, aber ich finde diese Lösung ziemlich hässlich und ohne Wiederverwertbarkeit .

Mit Mongoose und MongoDB würde ich die populate() Methode verwenden, aber ich kann nicht finden (das ist eigentlich ich weiß nicht, wie man danach sucht) ein Äquivalent zu diesem mit Eloquent.

Irgendwelche Vorschläge?

Antwort

0

Wenn Sie eine Pfosten() Beziehung in Ihrem User-Modell definiert, wenn das Abrufen der Benutzer können Sie eifrig Last die zugehörigen Daten:

$users = User::with('posts')->get(); 

oder einen bestimmten Benutzer:

$user = User::with('posts')->find($id); 

Dann würde $user->posts eine Sammlung der verwandten Post-Modelle enthalten.

Ich schlage vor, Sie lesen durch https://laravel.com/docs/5.5/eloquent-relationships

+0

Yup, das war es. Entschuldigung, ich hätte mehr Zeit mit den Dokumenten verbringen sollen. Für alle, die nach detaillierteren Informationen suchen, ist der richtige Abschnitt: https://laravel.com/docs/5.5/eloquent-relationships#eager-loading – ibanjo