Ric*_*haw 7 laravel eloquent laravel-4
我有3个表描述用户,角色和role_user.这些看起来像这样:
users -> id, name
roles -> id, name
role_user -> user_id, role_id
Run Code Online (Sandbox Code Playgroud)
在我的用户类中,我有:
public function roles()
{
return $this->belongsToMany('Role');
}
Run Code Online (Sandbox Code Playgroud)
这里的目的当然是允许用户拥有多个角色.
我可以做一个User::with('roles')->get()工作正常的查询.
我想要的只是选择具有特定角色的用户,理想情况下由名称指定,但如果需要,可以通过ID.我如何使用Eloquent做到这一点?
tha*_*max 10
belongsToMany在RoleModel中写一段关系
class Role extends Eloquent {
public function users() {
$this->belongsToMany('Users');
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用以下Eloquent Query.
$role = Role::with('users')->whereName($name)->first();
Run Code Online (Sandbox Code Playgroud)
您可以访问具有$name角色的所有用户$role->users.
tharumax的答案是完全有效的,非常有用.唯一的问题是如果你想用其他东西运行查询.比方说,具有admin角色并在2014年之前注册的用户.或者如果您想将其用作范围,则无法按照自己的方式进行操作.
这是另一种方式,但直接在查询上(尽管这是通过id搜索):
User::join('role_user', 'users.id', '=', 'role_user.user_id')
->where('role_user.role_id',$id)->get();
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以创建一个范围,以便更轻松地进行语法和管理.例如,我想让用户获得角色admin.
范围:
// Inside User model
public function scopeAdmins($query)
{
return $query->join('rol_user', 'users.id', '=', 'rol_user.user_id')
->where('rol_user.rol_id', id_of_admin );
}
Run Code Online (Sandbox Code Playgroud)
然后您可以轻松检索admin执行此操作的所有用户(如果需要,还可以添加其他条件):
User::admins()->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12174 次 |
| 最近记录: |