繁体   English   中英

Laravel 6 在索引刀片中如何仅显示在表中具有角色及其角色的用户

[英]Laravel 6 in index blade how can I show only users who have roles and their roles in the table

在 index.blade.php 中,我编写了这些代码来显示具有角色的用户

<thead>
    <tr>
        <th scope="col">Name</th>
        <th scope="col">Email</th>
        <th scope="col">Roles</th>
        <th scope="col">Actions</th>
    </tr>
</thead>
<tbody>
    @foreach($users as $user)
        <tr>
            <td>{{ $user->name }}</td>
            <td>{{ $user->email }}</td>
            <td>{{ $user->roles }}</td>
            <td>Show</td>
        </tr>
    @endforeach
</tbody>

我在 UserController 中编写了这些代码,

 $userId = \DB::table('role_user')->get()->pluck('user_id');
 $users = User::find($userId);

 return view('admin.index', compact('users'));

我在网站上得到了这些:

[{"id":1,"name":"User Administrator","description":null,"created_at":"2021-11-23 03:06:49","updated_at":"2021-11-23 03:06:49","pivot":{"user_id":1,"role_id":1}}]

[{"id":2,"name":"Moderator","description":null,"created_at":"2021-11-23 03:06:49","updated_at":"2021-11-23 03:06:49","pivot":{"user_id":2,"role_id":2}}]

如何只显示表角色列中的名称?

调用user->roles时,您很可能会调用用户 model 上的关系。 这意味着您要返回一个集合。 If you place a collection in curly braces in blade ( {{ $user->roles }} ), Laravel automatically calls toArray() on each model, and a json_encode on the result, which results in the JSON strings you end up seeing.

但是,您只需要名称,因此最好获取这些值并将它们转换为字符串。 这样做的一种选择是拔取name ,然后将结果内

implode(', ', $user->roles()->pluck('name')->toArray());

您必须在pluck()结果上调用toArray() ,否则您将拥有一个集合而不是一个数组,而implode无法使用。

如果用户已登录并且要显示他的角色,您可以在刀片中使用它:

{{ Auth::user()->roles->pluck('name') }}

或者你想显示另一个用户的 rools,那么你可以这样做:

// in Controller fetch the user:
$user = User::find(42);

// in your Blade:
{{ $user->roles->pluck('name') }}

在这种情况下,您可以使用多种方法:

  • 角色
  • 有角色
  • hasAnyRole
  • hasAllRoles
  • 获取角色名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM