2016-11-02 8 views
3

Ich baue eine App mit Eloquent und treffe ein bummer, ich benutze die Viele-zu-Viele-Pivot-Beziehung. ref: https://laravel.com/docs/5.0/eloquent#many-to-manyeloquent multiple whereHas ('pivot_table_X') UND whereHas ('pivot_table_X')

Benutzermodell

  • id
  • user_name

Role Model

  • id
  • role_name

Benutzer-Rollen-Modell (Pivot-Tabelle)

  • id
  • User_id
  • ROLE_ID

Wenn ich will 1 alle Benutzer mit Role-ID bekommen, werde ich nur einfach:

$users = $app->users->with('roles')->has('roles') 
    ->whereHas('roles' function($query) { 
     $query->where('role_id', 1); 
    }) 
    ->get(); 

Damit kann ich erfolgreich alle Benutzer mit Rollen id = 1.

[Problem] Jetzt Bummer, wenn ich alle Benutzer mit Role id = 1 AND Role id = 2 erhalten müssen (beide Administrator und Moderator in meinem Fall)

ich versuchte, läuft dies:

$users = $app->users->with('roles')->has('roles') 
    ->whereHas('roles' function($query) { 
     $query->where('role_id', 1); 
    }) 
    ->whereHas('roles' function($query) { 
     $query->where('role_id', 2); 
    }) 
    ->get(); 

Aber erschöpft meine PHP Ausführungszeit, gibt es eine richtige Art und Weise zu handhaben? Ich hoffe wirklich auf den effizienten Weg, dies zu tun.

Danke

+0

Sollte es nicht ** ODER ** anstelle von ** UND ** für bot die Rolle IDs sein? –

+0

@SougataBose Hallo! Ich glaube, dass ** ** und **, weil Pivot-Modell-Tabelle hat mehrere ** role_id ** für eine einzelne ** user_id **, was ich erreichen möchte, erhalten alle ** Benutzer **, wo beide ID '2 und 3 'sind in der ** role_id ** –

Antwort

0

Sie es wie versuchen:

$users = $app->users->with('roles') 
      ->whereHas('roles' function($query) { 
       $query->where('role_id', 1) 
        ->where('role_id', 2); 
      }) 
      ->get(); 

ich ->has('roles') absichtlich entfernt haben, weil wir whereHas() auf dem Rollen-Tabelle verwenden, so wird has keine Verwendung haben. Es wird genauso funktionieren.

+0

sorry, aber ich glaube nicht, dass SQL es lösen wird, würde es nach" single "Zeile in der Pivot-Tabelle suchen, wo" role_id ", die beide 1 und 2 ist, was nicht ist möglich. Versuchte es und offc, es wird kein Objekt aus dem Modell zurückgeben. –

Verwandte Themen