2016-07-25 46 views
0

我有一個Laravel應用程序。我使用this包作爲角色和權限。它效果很好。Laravel在用戶列表中的作用

我現在想顯示一個所有用戶及其角色的表格。目前我正在通過UsersController中的以下定義來解決它。

public function listUsers() 
    { 
     $users_admin = Role::where('name', 'admin')->first()->users()->get(); 
     $users_buyers = Role::where('name', 'buyer')->first()->users()->get(); 
     $users_sellers = Role::where('name', 'seller')->first()->users()->get(); 

     return view('admin.users.index', [ 
      'users_admin' => $users_admin, 
      'users_buyers' => $users_buyers, 
      'users_sellers' => $users_sellers 
      ]); 
    } 

在視圖中,我然後有3個獨立的循環顯示3個表(管理用戶,買家和賣家)。

不用說,我不太喜歡這種方法,我最好有一張表顯示用戶的角色。

這樣的想法是,我可以寫在UsersController以下代碼(或類似):在我看來,包含單個的foreach載明下列

$users = User::all(); 

@foreach($users_sellers as $user) 
    <tr> 
    <td align="center" class="hidden-xs">{{ $user->id }}</td> 
    <td>{{ $user->name }}</td> 
    <td>{{ $user->email }}</td> 
    <td>{{ $user->displayRole($user->id) }}</td> 
    </tr> 
@endforeach 

在上面的僞代碼,我已經定義了一個幫助器,它根據用戶標識檢索角色。問題是我無法弄清楚在輔助函數中放什麼東西?

注意:如果還有其他(更好的)方法不是助手,那也適用於我。

回答

1

據我看到這個包在您的用戶模型中增加了一個關係,因此$user->roles應該是一個集合,其角色分配給當前用戶。要不要爲每個用戶查詢,您應該用他們的角色熱切加載用戶,如下所示:$users = User::with('roles')->get();

+0

我也試過這個,但我總是得到「調用未定義的方法Illuminate \ Database \ Query \ Builder :: all()」 – wiwa1978

+0

試試get:'$ users = User :: with('roles') - >的get();'。 – TheFallen

+0

這工作。在視圖中,我正在執行以下操作:$ user-> roles [0] - > name來輸出角色名稱。這工作。但是如果有多個角色呢?那麼我應該迭代它們還是有更好的方法來顯示所有角色? – wiwa1978

0

在你控制器,得到了角色,如果您有它在你的桌子

public function listUsers() 
    { 
     $users_admin = Role::where('name', 'admin')->first()->users()->get(); 
     $users_buyers = Role::where('name', 'buyer')->first()->users()->get(); 
     $users_sellers = Role::where('name', 'seller')->first()->users()->get(); 
     $role = Role::get(); 

     return view('admin.users.index', [ 
      'users_admin' => $users_admin, 
      'users_buyers' => $users_buyers, 
      'users_sellers' => $users_sellers 
      'role' => $role 
      ]); 
    } 

在你視圖,只打印角色的名字像這樣

@foreach($users_sellers as $user) 
    <tr> 
    <td align="center" class="hidden-xs">{{ $user->id }}</td> 
    <td>{{ $user->name }}</td> 
    <td>{{ $user->email }}</td> 
    <td>{{ $role['$user->id']['role_name']</td> 
    </tr> 
@endforeach 

注:

<td>{{ $role['$user->id']['role_name']</td>

此行取決於您如何從控制器發送$role到您的視圖。它的目的是返回角色ID的數組名稱

希望這可以幫助你。

+0

我試過這個,但它仍然使用我不太喜歡的3個集合,users_admin,users_buyers和users_sellers。 – wiwa1978