【发布时间】:2016-08-06 05:55:00
【问题描述】:
我正在使用 Laravel 并使用 Zizaco Entrust 制作一个小作品。
以管理员身份登录时,我想查看特定用户的所有角色。
我搜索了一段时间,但没有找到任何线索... 我该如何使用 Entrust 或使用 SQL 查询?
【问题讨论】:
我正在使用 Laravel 并使用 Zizaco Entrust 制作一个小作品。
以管理员身份登录时,我想查看特定用户的所有角色。
我搜索了一段时间,但没有找到任何线索... 我该如何使用 Entrust 或使用 SQL 查询?
【问题讨论】:
在你的用户类中添加
public function roles()
{
return $this->belongsToMany('Role','assigned_roles');
}
然后你可以获取特定用户的所有角色
$user = User::with('roles')->find(1);
$roles = $user->roles;
【讨论】:
$roles = $user->roles; 确实有效,但返回数组中的所有角色。当我执行$roles = $user->roles[0]->name; 时,我可以获得特定的行,例如 name 和 created_at。但是我需要为所有角色循环这个(所以不是[0])......我应该怎么做(在视图中)?
foreach 循环一个集合,在视图中使用blade 语法,类似于@foreach ($user->roles as $role) {{ $role->name }} @endforeach
如果您使用的是 Zizaco\Entrust,则用户模型中不需要新角色方法。 Roles 方法已存在于 EntrustUserTrait 类中。您只需要在 User 类中使用这一行:
use EntrustUserTrait;
像这样:
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
class User extends Authenticatable
{
use EntrustUserTrait; // add this trait to your user model
.....
}
在您的 UsersController 中,您可以选择具有角色的用户(索引方法):
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use App\Http\Requests;
class UsersController extends Controller
{
protected $users;
public function __construct(User $users)
{
$this->users = $users;
parent::__construct();
}
public function index()
{
$users = $this->users->with('roles')->paginate(25);
return view('users.index', compact('users'));
}
在刀片循环中 $user->roles 在 $users 循环中,因为 $user->roles 是集合,即使用户只有一个角色。
@foreach($users as $user)
@foreach($user->roles as $role)
{{ $role->display_name }}
@endforeach
@endforeach
【讨论】: