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

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

$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 для not shift) в таблице посещаемости, не делая еще один запрос, чтобы сохранить ограниченное попадание в db.

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
2 098
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему orWhereHas?

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

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

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

Обновлено: это даст вам всех пользователей и загрузит правильное отношение userAttendance при соблюдении условий.

Но это вернет только тех пользователей, у которых есть посещаемость. Мне нужно, чтобы левое соединение было красноречивым. Мне нужны все пользователи и проверяю, есть ли посещаемость

Nur Uddin 08.12.2018 02:32

@Fawel Так что удалите -> whereHas вообще.

Arthur Samarcos 11.12.2018 15:06

Другие вопросы по теме