Проверьте, существуют ли данные в другой таблице, используя красноречивый запрос orWhereHas - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть две таблицы пользователей и посещаемости.В таблице посещаемости содержится посещаемость пользователей для present_date и present_type мудрых.present_type сохраняется для смены.Если смена, пользователь может иметь несколько посещений на дату.По этой причине у одного пользователя может быть много строк в таблице посещаемости.Я хочу показать всех пользователей и отметил =>, если посещаемость найдена для определенного дня, а тип для пользователя не отмечен =>, если посещаемость не существует для дня в цикле просмотра.

$userList = User::              
             orWhereHas('userAttendance', function ($q) use ($attDate,$type) {
                 $q->where('present_date', $attDate);
                 $q->wherePresentType($type);
             })->get();

В цикле блейд-файла:

  @foreach($userList as $key => $user)
 <input value="{{$user->id}}" title="" type="checkbox"
                                      @if($user->userAttendance)
                                      checked="checked" data-exist-id="{{$user->userAttendance->id}}"
                                      @endif class="action-normal" />

Но это работает не так, как ожидалось.Он проверяет, существует ли строка в таблице посещаемости без даты или типа фильтрации, записанной в orWhereHas Clasure!

Я хочу проверить, существуют ли данные определенного дня (если present_type не для смены) в таблице посещаемости, не делаядругой запрос, чтобы сохранить ограниченное попадание в дб.

Я могу сделать это, используя функцию в пользовательской модели, где функция получает параметр из блейд-файла во время цикла.Но я не хочу делать дополнительный запрос БД.

Есть ли способ использовать чистый eloquent?Могу ли я проверить его для пользователя во время цикла, используя данные, отправленные из функции контроллера?

1 Ответ

0 голосов
/ 07 декабря 2018

Почему orWhereHas?

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

$userList = User::query()              
             ->with(['userAttendance' => function($q) use($attDate,$type) {
                 $q->where('present_date', $attDate);
                 $q->wherePresentType($type);
             }])
             ->get();

Лучше загрузить отношение, избегая нескольких запросов в представлении.

Редактировать: Это даствы все пользователи и загружаете правильное отношение userAttendance, когда выполняются условия.

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