是否有更好的方法一次使用Entrust获取所有用户角色名称

时间:2015-01-30 00:39:21

标签: php laravel laravel-4

我需要用户角色和权限管理,所以我想考虑给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();
    });

感谢。

1 个答案:

答案 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,它们代表用户和角色之间的多对多关系。

在这里你应该有你的多对多关系吗?