2016-04-10 3 views
2

Ich versuche, eine viele zu viele Beziehung, in diesem Beispiel mit Benutzer und Rolle zu machen.Laravel gehörtToMany funktioniert nur in einer Richtung

In User-Modell habe ich dieses:

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

In Vorbild habe ich dies:

public function users() 
{ 
    return $this->belongsToMany('App\User', 'user_role', 'role_id', 'user_id'); 
} 

Und meine Pivot-Tabelle user_role:

public function up() 
    { 
     Schema::create('user_role', function(Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('user_id')->unsigned(); 
      $table->integer('role_id')->unsigned(); 
      $table->timestamps(); 

      $table->foreign('role_id')->references('id')->on('roles'); 
      $table->foreign('user_id')->references('id')->on('users'); 
     }); 
    } 

Nun, wenn ich $user->roles()->attach(1); tun Er erstellt eine Zeile in der Tabelle user_role. Aber das Problem ist, wenn ich darauf zugreifen möchte: $user->roles; es gibt nichts zurück. Es funktioniert mit $role->users; aber nicht anders herum. Was mache ich falsch?

+0

Ich weiß nicht, über Laravel, aber Sie müssen einen „many-to-many-Beziehung“ Tisch zwischen den beiden Tabellen erstellen und verwenden. –

+0

Ich verwende viele zu viele Beziehungsbeispiel aus Laravel Dokumentation https://laravel.com/docs/5.2/eloquent-relationships#many-to-many – user3743266

Antwort

1

Gelöst: Laravel 5.2.29

sicher Name ist role_user

$user = User::find(1); 
    $role = Role::find(2); 
    // In this example I am passing in a Role object but $role->id also works 
    $user->roles()->attach($role); 

Hoffnung das funktioniert für Sie die Tabelle machen.

+0

Ich versuchte beide Tabellennamen user_role und role_user aber immer noch das gleiche Problem. 'belongsToMany ('App \ User', 'user_role', 'role_id', 'user_id');' In diesem zweiten Parameter steht Tabellenname, 3. bedeutet aktuelle Modellzeile dort und 4. bedeutet zugehöriger Modellzeilenname – user3743266

+0

Ich habe das erstellt Repo für Sie. klonen Sie das folgende Repo: [https://github.com/HashmatWaziri/laravel-5.2.29-manyToManyRelationship](https://github.com/HashmatWaziri/laravel-5.2.29-manyToManyRelationship) – user2592890

0

Sie haben die Beziehung neu zu laden, nachdem wie ein versehentlichen

$user->roles()->attach($role); 

$user->load('roles');