2016-07-25 47 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