Laravel Eloquent: выберите, где в связанной таблице есть x, но исключите определенные строки из связанной таблицы. - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь вернуть коллекцию из базы данных, в которой находится «Группа пользователей», а также связанные с ней пользователи.Однако я хочу, чтобы критерии выбора основывались на том, обучен ли пользователь в соответствующей таблице или нет.Если это так, я хочу, чтобы эта строка / запись была ИСКЛЮЧЕНА из окончательной коллекции.

enter image description here

По сути, я хочу:

Возвращать все группы типа 'GreenGroup', где хотя бы один связанный сотрудник не обучен, и отображать в таблице только неподготовленных сотрудников.

Так, чтобы он возвращал такой объект, как этот:

0: {
id: 2,
group: GreenGroup,
size: 4,
employees: {
   0: {name: 'Jane', isTrained: 0},
   1: {name: 'Jeremy', isTrained: 0}
  }
}

Но сейчас он находит GreenGroup, но возвращает ВСЕХ пользователей в этой группе.Я ищу способ исключить их в построителе запросов.Итак, вот что у меня есть:

$results = Group::with(['employees'])->where('group', '=', 'GreenGroup')->whereHas('employees', function($query){
      $query->where('isTrained', '=', '0');
    })->get();

  return json_encode($results);

Есть ли способ исключить записи реляционных таблиц в построителе запросов?Или я вынужден (когда я прохожу их и показываю их на моем сайте) написать логику, которая проверяет, обучены они или нет?

1 Ответ

0 голосов
/ 11 сентября 2018

Вам нужно изменить свой запрос, как я упоминал ниже:

 $results = Group::with(['employees' => function($query){
       $query->where('isTrained', '=', '0');
     }])->where('group', '=', 'GreenGroup')->get();

   return json_encode($results);

Запрос, который вы упомянули, всегда будет возвращать все элементы, потому что вы задали условие в whereHas не в.

Запрос, который вы написали, в основном используется для получения всех групп с нетренированными членами (для этого вам нужно удалить where ('group', '=', 'GreenGroup')), но вы хотите что-то противоположное, поэтому вам нужно установить условие в С.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...