2017-01-13 5 views
0

So habe ich eine user Tisch, ein role Tisch und eine Zwischentabelle für diejenigen 2, user_role. Es ist eine Viele-zu-Viele-Beziehung zwischen den ersten beiden Tabellen. Ich möchte die Anzahl der Benutzer, die eine bestimmte Rolle haben, zurückgeben, aber ich kann nicht scheinen, es richtig zu machen.über Pivot-Tabelle Laravel 5.2

Meine Migrationen:

Benutzer:

Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->timestamps(); 
     $table->string('email')->unique(); 
     $table->string('username')->unique(); 
     $table->string('password'); 
}); 

Rolle:

Schema::create('roles', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->timestamps(); 
     $table->string('name', 40); 
     $table->string('description', 255); 
    }); 

user_role:

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

Beziehung zwischen ihnen:

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

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

Rolle Seeder:

public function run() 
    { 
     Role::create([ 
      'id'   => 1, 
      'name'   => 'Admin', 
      'description' => 'Admin User.' 
     ]); 
     Role::create([ 
      'id'   => 2, 
      'name'   => 'Vendor', 
      'description' => 'Vendor User.' 
     ]); 
     Role::create([ 
      'id'   => 3, 
      'name'   => 'User', 
      'description' => 'Simple User.' 
     ]); 
    } 

in Controller:

public function adminDashboard(){ 
     $users = User::all(); 
     return view('admin.dashboard')->withUsers($users); 
    } 

im Blick:

{{ $users->count() }} 

Das ist offensichtlich, gibt die Gesamtzahl der Benutzer in der Benutzertabelle. Irgendwelche Ideen, wie man die Anzahl der Benutzer zurückgibt, die eine bestimmte Rolle haben?

Antwort

1

Verwendung $role->users()->count()

über die Rollen zu durchlaufen und die Anzahl der Benutzer angezeigt werden, können Sie diese verwenden:

public function adminDashboard(){ 
    $roles = App\Role::all(); 
    return view('admin.dashboard', compact('roles')); 
} 

In Ihrem Dashboard-Ansicht:

@foreach ($roles as $role) 
    <p>Role {{ $role->name }} has {{ $role->users()->count() }} users</p> 
@endforeach 
+0

das scheint nicht helfen. Es gibt Fehler zurück: Method Benutzer existiert nicht. – daino92

+0

Aber Sie haben erwähnt, Sie haben eine öffentliche Funktion users() in Ihrem Rollenmodell Versuchen Sie: $ role = Role :: find (1); echo $ rolle-> users() -> count() – Paras

+0

Sie haben Recht. Aber trotzdem ... Irgendwelche Gedanken, warum passiert das? – daino92