我需要用户角色和权限管理,所以我想考虑给Entrust包节省时间。在使用它时,我需要在路由中显示所有用户的用户名和角色名称,所以我在路由
中执行此操作Route::get("user-with-role", function(){
$user = User::with('roles')->get();
foreach (User::with('roles')->get() as $u)
{
echo $u->username;
foreach ($u->roles as $role) {
echo " is ".$role->name;
echo "<br>";
}
}
});
有没有更好的方法来获取角色名称而不是内部foreach循环?
这是用户表的数据库结构
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('email');
$table->string('remember_token')->nullable();
$table->timestamps();
});
感谢。
答案 0 :(得分:1)
如果您包含用户和角色的架构结构(如果存在),我希望我能提供更多帮助。以及您的用户模型和角色模型。但这是应该发生什么的要点。如果你想要一个更好的答案......我需要你更多。理想情况下,如果您在类中定义了关系,那么您应该能够在用户和角色之间建立SQL连接,或者访问与Eloquent ORM的关系。
你不应该在你的路线功能中回应HTML ...这对你没有任何帮助。同样在你的路由函数中你应该返回一些东西,因为这是一个GET请求,服务器将期待一个响应......
<强>路线强>
Route::get("users", function() {
$users = User::select('username', 'role')->with('roles')->get();
return View::make('SOME VIEW')->withUsers($users);
});
Blade View
<table>
<thead>
<tr>
<th>Username</th>
<th>Role</th>
</tr>
</thead>
<tbody>
@foreach ($users as $user)
<tr>
<td>{{ $user->username }}</td>
<td>{{ $user->role }}</td>
</tr>
@endforeach
</tbody>
</table>
用户与角色的关系
现在生成Entrust迁移
$ php artisan entrust:migration
它将生成<timestamp>_entrust_setup_tables.php migration
。您现在可以使用artisan migrate命令运行它:
$ php artisan migrate
迁移后,将出现两个新表:包含现有角色的角色及其权限和assigned_roles,它们代表用户和角色之间的多对多关系。
在这里你应该有你的多对多关系吗?