2014-10-30 49 views
0
// 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 

我试图加载用户提供了一定的作用,即加载所有的编辑,用下面的代码:Laravel 4.1急于关系“和”忽略约束条款

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

上面的代码返回每个用户,忽略$ query-> where。怎么了?

回答

1

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

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

我错过了和whereHas之间的区别。谢谢! – brazorf 2014-10-30 15:19:23

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