在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将查询角色表而不是用户表。
答案 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
模型中的role
或User
与roles
表的关系。我已经使用了roles
,因为您已在问题代码中使用过它。