2016-07-21 4 views
-2

Meine Datenbank-Inhalte die 3 Tabellen:Warum arbeitet Beziehung nicht viele-zu-viele?

users   roles  role_user 
id | name  id | name user_id | role_id 

Rollenmodell:

class Role extends Model 
{ 
    // TODO 
} 

Benutzermodell:

public function roles(){ 
     return $this->belongsToMany('Role'); 
    } 

Controller:

public function getUsers(){ 
     $users = User::all(); 

     foreach($users->roles as $item){ 
      dd($item); 
     } 
    } 

Wenn ich rufe Methode getUsers() ich Fehler:

Undefined property: Illuminate\Database\Eloquent\Collection::$roles

Also, ich brauche alle Rollen von Benutzer zu erhalten, könnte es einige Werte für jeden Benutzer sein. Was mache ich falsch?

Antwort

2

Benutzer ist eine redegewandte Sammlung, deshalb existiert die Rollenmethode nicht.

Sie wollen, so etwas tun:

public function getUsers() { 
    // eager load roles to prevent n+1 query problem 
    $users = User::with('roles')->get(); 

    foreach ($users as $user) { 
     foreach ($user->roles as $item) { 
      echo $item; 
     } 
    } 
} 
+0

Können Sie bitte erklären, warum meine Lösung nicht funktionieren? Und was hast du verändert? – Dev

+0

Und wie kann ich '$ user-> Rollen' direkt in der Vorlage anzeigen? – Dev

+0

Die Eloquent Collection ($ users) verfügt nicht über die Methode (Rollen), die Sie im Benutzermodell deklariert haben. –