【发布时间】:2014-03-17 20:59:38
【问题描述】:
我有这些表:
| users |
|-------------|
| id |
| name |
| groups |
|-------------|
| id |
| name |
| permissions |
|-------------|
| id |
| name |
| perm_key | <- UNIQUE index
然后我有这些多对多的关系:
groups -> groups_users <- users
groups -> groups_permissions <- permissions
因此,任何用户都可能属于多个组,每个组可能拥有一组权限。
现在我正在尝试使用给定的权限密钥获取 DISTINCT 用户的集合,或者换句话说,一个包含所有具有访问“accessSpecialPlace”权限的用户的集合。
到目前为止我得到了什么:
$key = 'accessSpecialPlace';
$permission = Permission::with('groups', 'groups.users')->where('permKey', '=', $key)->first();
$resultUsers = array();
foreach($permission->groups as $group) {
foreach($group->users as $user) {
$resultUsers[] = array(
'id' => $user->id,
'first_name' => $user->first_name
);
}
}
return Response::json($resultUsers, 200, array(), JSON_PRETTY_PRINT);
到目前为止,它工作得非常完美,除了它还不是一个集合(我刚刚将它们添加到一个数组中)并且它还不是不同的(因为如果一个用户属于有权访问该权限的 2 个组,他们会出现两次)。
PS:我没想到在我的第一次尝试中就可以轻松加载急切的加载部分!我喜欢这个框架!
【问题讨论】:
-
除非你真的需要
JSON_PRETTY_PRINT,你可以直接返回数组/集合。 Laravel 会自动为你转换成 JSON。 -
我只是为了测试目的而漂亮地打印 JSON。
标签: php laravel laravel-4 eloquent