2016-05-25 4 views
0

У меня есть модель Пользователи и в нем у меня есть следующие отношенияПолучение сводных данных таблиц

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

Я также установить обратный в рамках модели группы. После завершения У меня есть таблица с данными 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', '=', правда) -> получить();

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

По какой-то причине каждый пользователь добавляется в этот массив, где должны добавляться только администраторы.

Я просто искал советы относительно того, что я делаю неправильно? Мне нужно каким-то образом связать имя_группы с groupId?

Благодаря

ответ

1

Попробуйте это:

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

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

На основании Вашего требования, чтобы все пользовательские запросы, связанные с конкретной группой

Вы можете сделать что-то вроде

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

или с Eager Загрузка:

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

Первое предложение дает мне аргумент 2, переданный в Illuminate \ Database \ Eloquent \ Builder :: whereHas() должен быть экземпляром Closure, integer given. Кроме того, что произойдет, если я не знаю groupId, только groupName? Спасибо –

+1

'group_id' его просто условие, которое вы хотите применить к группе. –