Laravel 4.1急切关系“与”忽略约束条款

时间:2014-10-30 11:03:44

标签: php laravel-4 eloquent

// class User
public function roles() {
    return $this->belongsToMany('Role', 'user_roles', 'uid', 'rid');
}

// class Role
public function users() {
    return $this->belongsToMany('User', 'user_roles', 'rid', 'uid');
}

// sql
-- user
id | name | other fields

-- user_role
id | name

-- user_roles, uid fk to user and rid fk to user_role
uid | rid

我正在尝试使用以下代码加载具有特定角色的用户,即加载所有编辑器:

<?php
$roleName = 'editors';
return \User::with(array('roles' => function($query) use($roleName) {
    $query->where('name', '=', $roleName);
}))->get();

以上代码返回每个用户,忽略$ query-&gt;其中。怎么了?

2 个答案:

答案 0 :(得分:1)

阅读withwhereHas的文档。后者就是你想要的:

return \User::whereHas('roles', function($query) use($roleName) {
    $query->where('name', '=', $roleName);
})->get();

答案 1 :(得分:0)

您还可以尝试另一种选择:

$role = new Role::find($role_id);
return $role->users->all();

这将返回所有用户

或者如果你有些话:

$role = new Role::find($role_id);
return $role->users()->where('name','like','%foo%')->get();

这将返回名称为foo

的所有用户