Laravel 4.2 Eloquent获取特定用户和特定角色

时间:2014-06-16 20:28:05

标签: laravel-4 eloquent

在Laravel Eloquent中,很多例子都使用了用户和角色的场景http://laravel.com/docs/eloquent#many-to-many说我有一组用户拥有相同的家庭“Simpson”名称,我希望得到所有这些用户和角色作为“工程师”的角色。如何使用Eloquent实现这一目标?在示例中,使用“has”方法http://laravel.com/docs/eloquent#querying-relations但是如何查询数据库中是否存在用户表和角色表中的值?

我不是在寻找

User::find(1)->roles();

我正在寻找一种方法来做类似

的事情
User::whereFamilyName('simpson')->roles()->whereName('Engineer')

第二个whereName将查询角色表而不是用户表。

2 个答案:

答案 0 :(得分:2)

如果您需要获得具有特定角色的用户:

$role = 'Engineer';

// users with family name Simpson having role Engineer
$users = User::whereFamilyName('Simpson')
      ->whereHas('roles', function ($q) use ($role) {
           $q->where('roles.name', $role); // it joins the table so you may need to use prefixed column name, otherwise you can still use dynamic whereName()
      })
      // with('roles') if needed
      ->get();
// returns Collection of User models without roles or with all roles attached to each user if needed

否则只需加入表格:

User::whereFamilyName('Simpson')
   ->join('role_user', 'role_user.user_id', '=', 'users.id')
   ->join('roles', 'role_user.role_id', '=', 'roles.id')
   ->whereName('Engineer') // again columns name conflict may occur
   ->get(['users.*']);

这里所有值都是硬编码的,以便明确。

答案 1 :(得分:0)

你可以试试这个:

$users = User::with(array('roles' => function($query){
    $query->whereName('Engineer');
}))->whereFamilyName('simpson')->get(); // whereFamilyName = family_name in DB

希望您已正确宣布该关系,并确保roles模型中的roleUserroles表的关系。我已经使用了roles,因为您已在问题代码中使用过它。