2017-06-02 1 views
2

ich einzelne User-eloquent Modell in meinem Laravel App habe:Entrust mit Laravel - Eloquent Abfragen mit bedingtem Rollen

Ich werde für Rollen Entrust werden. Benutzer können mehrere Rollen haben.

ich es geschafft, bereits der Benutzer mehrere Rollen mit demselben eloquent Modell Benutzer wie folgt zu erhalten:

public function company(){ 

    if($this->hasRole('admin')){ 

     return $this->hasOne('App\Company'); 

    }elseif($this->hasRole('member')){ 

      return $this->belongsTo('App\Company'); 
    } 

    } 

Wie dies nehme in Firma Modell in anderen Modellen zu handhaben:

public function admin(){ 

    $this->hasOne('App\User'); //if has role admin 
} 

public function members(){ 

    $this->hasMany('App\User'); //if has role member 
} 

Wie funktioniert das?

bearbeiten Ich bin in der Lage, durch die Benutzer zu durchqueren und die damit verbundenen Benutzer mit spezifischer Rolle zu bekommen, aber es fügt null Elemente in der Sammlung:

public function admin(){ 

    return $this->hasOne('App\User')->get()->map(function($u){ 

     if($u->hasRole('admin') && $u != null){ 

      return $u; 

     } 

    }); 


} 

Obwohl, ich bin Überprüfung der $u != null I kann viele Nullobjekte in der Sammlung sehen.

+0

Sie sollten eine 'manages' Beziehung hinzufügen, die dynamisch das entsprechende Modell angebracht werden –

+0

Wie das zu tun? Kannst du es ausarbeiten? –

+0

ja mehrere Rollen pro Benutzer. Und ich benutze trust, die eine Pivot-Tabelle role_user Tabelle für mehrere Beziehungen hat. In der Benutzertabelle gibt es kein Attribut für die Rolle. –

Antwort

0

So habe ich es geschafft. Allerdings bin ich nicht in der Lage, anstatt das Relation-Objekt zu erhalten, ich bin Sammlung von Benutzern immer Rolle Admin mit

public function admin(){ 

    return $this->hasOne('App\User')->get()->map(function($u){ 

     if($u->hasRole('admin') && $u != null){ 

      return $u; 

     } 

    })->reject(function ($u){ 
     return $u == null; 
    }); 


} 
+0

Ich werde eine andere Antwort akzeptieren, wenn es das Problem effizienter löst. Warten bis dann kann dies jemand jetzt helfen. –

Verwandte Themen