Laravel中通过下拉选框筛选车辆日志数据的实现方法咨询
解决方案
第一步:调整前端筛选表单
在你的admin/vehiclereport.blade.php中添加GET提交的筛选表单,示例代码如下:
<form action="{{ route('vehiclereport') }}" method="get"> <select name="staff_key" class="form-select"> <option value="">全部员工</option> @foreach($staff as $item) <option value="{{ $item->smsstaff_key }}" {{ request('staff_key') == $item->smsstaff_key ? 'selected' : '' }}> {{ $item->name }} </option> @endforeach </select> <button type="submit" class="btn btn-primary">筛选</button> </form>
注意:路由名称如果不是vehiclereport请替换成你自己定义的对应路由名称
第二步:修改控制器查询逻辑
控制器中引入Request依赖,使用Laravel查询构造器的when方法动态追加筛选条件,修改后的代码如下:
use Illuminate\Http\Request; public function vehiclereport(Request $request) { // 构造基础查询 $query = VehicleLog::join('vehicle', 'vehicleslog.vehicle_id', '=', 'vehicle.id') ->join('staff', 'vehicleslog.staff_key', '=', 'staff.smsstaff_key'); // 存在员工筛选参数时追加过滤条件 $query->when($request->filled('staff_key'), function ($q) use ($request) { $q->where('staff.smsstaff_key', $request->input('staff_key')); }); // 执行查询 也可以换成paginate(10)实现分页效果 $energy = $query->orderBy('vehicleslog.id', 'desc')->get(); $cars = Vehicle::get(); $staff = Staff::all(); return view('admin.vehiclereport', compact('energy', 'cars', 'staff')); }
注意:如果你的VehicleLog模型对应表名不是vehicleslog,请将join语句中的表名替换成你实际的表名即可
内容的提问来源于stack exchange,提问作者voxire
相关产品推荐
相关产品推荐

