获取数据透视表数据

时间:2016-05-25 08:44:21

标签: laravel laravel-5 laravel-5.1

我有一个用户模型,在其中我有以下关系

public function group()
{
    return $this->belongsToMany('App\Group', 'users_user_groups')->withPivot('user_id', 'group_id');
}

我还在Group模型中设置了反转。完成后,我有一个users_user_group表,其中包含类似的数据

+------+-------------------+----------+
| id   |           user_id | group_id |
+------+-------------------+----------+
|  755 |                 1 |        1 |
|  756 |                 1 |        2 |
|  757 |                 1 |        3 |
|  758 |                 1 |        4 |
|  759 |                 1 |        5 |
|  760 |                 1 |        6 |
|  761 |                 1 |        7 |
|  762 |                 1 |        8 |
|  763 |                 1 |        9 |
|  764 |                 1 |       10 |
|  765 |                 2 |       11 |
|  766 |                 2 |        7 |
|  767 |                 2 |       10 |
|  768 |                 3 |       12 |
|  769 |                 3 |       13 |

所以我知道正确插入了数据。现在在我的一个控制器中,我试图让所有属于admin组的用户,其group_id为1.所以我在做 $ users = User :: where('active','=',true) - > get();

foreach ($users as $user) {
    if($user->group()->where('groupName', 'admin')) {
        $groupArray[] = $user;
    }
}

出于某种原因,每个用户都被添加到此阵列中,其中只应添加管理员。

我只是在寻找关于我做错了什么的建议?我是否需要以某种方式将groupName链接到groupId?

由于

2 个答案:

答案 0 :(得分:1)

试试这个:

foreach ($users as $user) {
    $userGroups = $user->group()->where('groupName', 'admin')->get();

    if( $userGroups->count() ) {
        $groupArray[] = $user;
    }
}

答案 1 :(得分:1)

根据您的要求让所有用户与特定群组相关

您可以执行类似

的操作
$users = User::whereHas('group', function($q) use($group_id){
    $q->where('group.id', '>=', $group_id);
})->get();

或预先加载:

$users = User::where('id', $user_id)
  ->with([ 'group' => function($query) use ($group_id) {
    $query->where('id', $group_id)
}]);