2015-07-21 3 views
13

Ich habe versucht, ein einfaches Benutzerverwaltungssystem zu erstellen, sondern weiterhin Straßenblockaden zu gehen, wenn es darum geht, Beziehungen abzufragen. Zum Beispiel habe ich Benutzer und Rollen und immer wenn ich versuche, eine Abfrage für alle Benutzer und ihre Rollen, bekomme ich einen Fehler. Der Titel im Titel ist nur der letzte, dem ich begegnet bin.Laravel 5 Abfragen mit Beziehungen verursacht "Aufruf an eine Member-Funktion addEagerConstraints() auf Null" Fehler

Meine Benutzer- und Rollenmodelle wie folgt aussehen:

class Role extends Model 
{ 
    public function users() 
    { 
     $this->belongsToMany('\App\User', 'fk_role_user', 'role_id', 'user_id'); 
    } 
} 

class User extends Model 
{ 
    public function roles() 
    { 
     $this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id'); 
    } 
} 

Meine Migrationstabelle für viele-zu-viele-Beziehung zwischen den beiden wie folgt aussieht:

public function up() 
    { 
     Schema::create('role_user', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('user_id')->unsigned()->nullable(); //fk => users 
      $table->integer('role_id')->unsigned()->nullable(); //fk => roles 

      $table->foreign('fk_user_role')->references('id')->on('users')->onDelete('cascade'); 
      $table->foreign('fk_role_user')->references('id')->on('roles')->onDelete('cascade'); 
     }); 
    } 

Und dann versuche ich, alle Datensätze mit ihrer Beziehung in einem Controller zu erhalten:

public function index() 
{ 
    $users = User::with('roles')->get(); 

    return $users; 
} 

Also brauche ich ein anderes Paar Augen, um mir zu sagen, was ich hier vermisse?

Antwort

39

Sie fehlen zurückgeben Anweisungen in den Methoden, die Beziehungen definieren. Sie müssen die Beziehungsdefinition zurückgeben.

ersetzen

public function roles() 
{ 
    $this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id'); 
} 

Mit

public function roles() 
{ 
    return $this->belongsToMany('\App\Role', 'role_user', 'user_id', 'role_id'); 
} 
+1

auch für alle anderen dies mit dem gleichen Problem zu lesen ich den zweiten Parameter von "fk_user_role" zu beheben, musste "role_user". – Tomkarho

+1

Ich werde mich jetzt töten: P Stunden verschwendet, zumindest jetzt werde ich nie vergessen – Jorn

+0

selben Problem wie ich, verbringen Stunden, um dumme Fehler zu lösen, danke –

Verwandte Themen