В раскрывающемся списке отображаются только данные с «true» или «1», Laravel

#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