#mysql #laravel #eloquent #laravel-8
Вопрос:
У меня есть выпадающий список, в котором используется объединение для получения имен сотрудников из staff
таблицы mysql и отображения в моей форме, при нажатии на имя сотрудника и отправке формы ID
имена сотрудников сохраняются в моей основной таблице. Проблема в том, что все сотрудники показывают, даже если у них статус «0» для false. Есть ли какой-нибудь способ показать только сотрудников с доступным статусом «1»? Я пытался использовать предложение where, но оно, казалось, ничего не дало.
Мой контроллер:
public function vehiclereport() { $startDate = request()-gt;input('startDate', '2021-01-01'); $endDate = request()-gt;input('endDate', '2021-12-12'); $energy = VehicleLog::join('vehicle', 'vehicleslog.vehicle_id', '=', 'vehicle.id') -gt;join('smsstaff', 'vehicleslog.smsstaff_key', '=', 'smsstaff.smsstaff_key')-gt;where('available', 1) -gt;when(request()-gt;input('smsstaff_key'), function ($query) { $query-gt;where('smsstaff.smsstaff_key', request()-gt;input('smsstaff_key')); }) -gt;whereDate('log_dt', 'gt;=', $startDate) -gt;whereDate('log_dt', 'lt;=', $endDate)-gt;orderBy('log_dt', 'desc') -gt;get(); $cars = Vehicle::get(); $staff = Staff::all(); return view('admin.vehiclereport', compact('energy', 'cars', 'staff', 'startDate', 'endDate')); }
Вид:
lt;labelgt;Pick a staff memberlt;/labelgt; lt;select name="smsstaff_key" id="smsstaff_key" requiredgt; lt;option gt;----------------Select-----------------lt;/optiongt; @foreach ($staff as $staffMember) lt;option value="{{$staffMember-gt;smsstaff_key}}" {{request()-gt;input('smsstaff_key') === $staffMember-gt;smsstaff_key ? 'selected="selected"' : ''}}gt;{{$staffMember-gt;name}}lt;/optiongt; @endforeach lt;/selectgt;
Комментарии:
1. Почему бы вам также не использовать
where
, как вы делаете в «энергии»?2. Да,я сделал это в » $staff = Персонал::все()-gt;где («доступно», 1); » и я добавил OrderBy (), но это, похоже, не работает, есть идеи по этому поводу?
3. Прежде всего, не используйте все, а затем отфильтруйте с помощью where. Сначала он извлечет все, а затем отфильтрует в памяти на прикладном уровне. Используйте staff::запрос() — gt;где. Также проверьте в бд, действительно ли значения равны 1