2017-06-01 113 views
0

我有管理員用戶及其角色與他們的關係的表。我希望管理員用戶列表與他們各自的角色。獲取管理員用戶的角色名稱

我想下面的查詢

$adminusers = Admin::whereHas('roles', function($q) 
     { 
      $q->where('roles.name', '<>', 'Superadmin'); 
      $q->select('roles.name as roles'); 
     })->select('id', 'name')->where('admins.status', 'A')->where('admins.is_delete', '0')->paginate(15); 

,但我無法從中檢索角色名稱。

那麼我怎樣才能從上面的查詢角色名稱?

回答

1

您無法從whereHas關閉中進行選擇。在這種情況下,用於限制管理員的結果,而不是檢索角色。

您可以查詢特定模型的關係,像這樣:

$singleAdmin->roles()->where('roles.name', '<>', 'Superadmin')->get(); 

或者你可以預先加載過程中把限制:

Admin:::with(['roles' => function ($query) { 
    $q->where('roles.name', '<>', 'Superadmin'); 
}])->get(); 

https://laravel.com/docs/5.4/eloquent-relationships#constraining-eager-loads

一旦渴望加載,你會需要訪問$singleAdmin->roles中的角色集合。

在某些情況下,只使用連接是有意義的。

+0

附:做如果角色是belongsTo,那麼'$ singleAdmin-> roles'將會是一個模型,而不是一個集合,而'roles'將是這個關係的誤導性名稱。 – Devon

0

您可以使用leftJoin方法。

`$admins = Admin::leftJoin('roles','admin.role_id','=','roles.id') 
->select('id', 'name') 
->where('admins.status', 'A') 
->where('admins.is_delete', '0') 
->paginate(15)` 

或者您也可以在模型文件

`public function role() 
{ 
    return $this->hasOne(\App\Models\Roles::class, 'id', 'role_id'); 
}` 
相關問題