我有一个用户模型,在其中我有以下关系
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?
由于
答案 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)
}]);