2016-10-15 7 views
3

Bisher wurde das Extrahieren ich die Beziehung Objekte wie Arrays und dann wie etwas zu tun:Wie eloquente Beziehungen in Laravel ketten?

App\Model::find($id) 

Aber so ist es eine Möglichkeit, so etwas wie zu tun:

Auth::user()->group()->members() 

Es bis Auth::user()->group funktioniert aber nicht weiter Verkettung. Bitte helfen Sie, wenn Sie etwas getan haben. Oder ich bin nur Neuling.

Antwort

7

Sie eifrig Laden verwenden kann der Benutzer die Gruppe zu laden und dann alle Mitglieder dieser Gruppe zu laden.

$user = User::with(['group', 'group.members'])->find(1); 

// OR if you already have a user object (Like when using the Auth facade) 
$user = Auth::user()->load(['group', 'group.members']); 

foreach ($user->group->members as $member) { 
    // Do something with a member 
} 

Wenn Sie jedoch im Wesentlichen der Struktur eine Ebene hinunter springen wollen, und alle Mitglieder zu einem Benutzer im Zusammenhang erhalten, könnten Sie die hasManyThrough Beziehung, dass verwenden ein Benutzer viele Mitglieder hat, durch eine Gruppe.

// In your User model 
public function members() 
{ 
    return $this->hasManyThrough(Member::class, Group::class); 
} 

diese Weise können Sie einfach die Mitglieder direkt durch den Benutzer zugreifen kann:

$members = Auth::user()->members; 

Statt eine Abfrage zu tun, um die Gruppe des Benutzers zugreifen und dann eine weitere Abfrage tun zu, dass die Mitglieder der Gruppe zugreifen, Laravel würde Verwenden Sie eine einzelne Abfrage mit einem Join, um die Mitglieder zu erhalten.

Werfen Sie einen Blick auf die hasManyThrough Beziehung here

3

Versuchen Sie, diese

Auth::user()->group->members 
+0

ich es irgendwo verpasst haben muss. Danke dafür (: –

+0

Akzeptiert eine andere Antwort, nur weil es für neue Leute illustrativer ist .. –

+0

Das ist in Ordnung @TheAkashRajput. :). Die obige Antwort ist wirklich illustrativer. Wir sollten immer das Beste akzeptieren. Vielen Dank :) – Vikash