У меня две таблицы пользователей и посещаемости.
Таблица посещаемости содержит данные о посещаемости пользователей для 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. Но я не хочу делать дополнительный запрос к БД.
Есть ли способ использовать чистое красноречие? Могу ли я проверить это для пользователя во время цикла, используя данные, отправленные из функции контроллера?






Почему orWhereHas?
Попробуй это:
$userList = User::query()
->with(['userAttendance' => function($q) use($attDate,$type) {
$q->where('present_date', $attDate);
$q->wherePresentType($type);
}])
->get();
Лучше загрузить отношение, избегая множественных запросов в представлении.
Обновлено: это даст вам всех пользователей и загрузит правильное отношение userAttendance при соблюдении условий.
@Fawel Так что удалите -> whereHas вообще.
Но это вернет только тех пользователей, у которых есть посещаемость. Мне нужно, чтобы левое соединение было красноречивым. Мне нужны все пользователи и проверяю, есть ли посещаемость