Laravel日期范围过滤器



我有一个表单,有一个下拉菜单来选择一个工作人员和一个日期和日期字段,他们可以选择他们所需的日期,它应该显示所有选定的工作人员的记录在该日期范围内,但它只显示该工作人员的所有记录,从未在所需的日期范围内。这是我尝试过的

控制器:

public function vehiclereport()
{
$startDate = '2021/01/01';
$endDate = '2021/12/12';
$energy = VehicleLog::join('vehicle', 'vehicleslog.vehicle_id', '=', 'vehicle.id')
->join('smsstaff', 'vehicleslog.smsstaff_key', '=', 'smsstaff.smsstaff_key')
->when(request()->input('smsstaff_key'), function ($query) {
$query->where('smsstaff.smsstaff_key', request()->input('smsstaff_key'));
})
->whereDate('log_dt', '>=', $startDate)
->whereDate('log_dt', '<=', $endDate)
->get();
$cars = Vehicle::get();
$staff = Staff::all();
return view('admin.vehiclereport', compact('energy', 'cars', 'staff', 'startDate', 'endDate'));
}

视图:

<form>
<select name="smsstaff_key" id="smsstaff_key">
<option></option>
@foreach ($staff as $staffMember) 
<option value="{{$staffMember->smsstaff_key}}" {{request()->input('smsstaff_key') === $staffMember->smsstaff_key ? 'selected="selected"' : ''}}>{{$staffMember->name}}</option>
@endforeach
<input type="date" class="form-control" name="startDate">
<input type="date" class="form-control" name="endDate">
</select>
<button>Filter by selected staff member</button>
</form>

这里有几个问题:

(a)你有你的输入在选择中,把它们移出选择,

(b) from/to日期格式不正确。它们应该像YYYY-MM-DD

(c)您实际上没有使用这些日期初始化输入,即执行<input type="date" name="startDate" value="{{ $startDate }}" />

之类的操作(d)您没有从输入中读取日期,您当前将它们设置为静态。

试试下面的代码:

public function vehiclereport()
{
$startDate = request()->input('startDate', '2021-01-01');
$endDate = request()->input('endDate','2021-12-12');
$energy = VehicleLog::join('vehicle', 'vehicleslog.vehicle_id', '=', 'vehicle.id')
->join('smsstaff', 'vehicleslog.smsstaff_key', '=', 'smsstaff.smsstaff_key')
->when(request()->input('smsstaff_key'), function ($query) {
$query->where('smsstaff.smsstaff_key', request()->input('smsstaff_key'));
})
->whereDate('log_dt', '>=', $startDate)
->whereDate('log_dt', '<=', $endDate)
->get();
$cars = Vehicle::get();
$staff = Staff::all();
return view('admin.vehiclereport', compact('energy', 'cars', 'staff', 'startDate', 'endDate'));
}

和视图:

<form>
<select name="smsstaff_key" id="smsstaff_key">
<option></option>
@foreach ($staff as $staffMember) 
<option value="{{$staffMember->smsstaff_key}}" {{request()->input('smsstaff_key') === $staffMember->smsstaff_key ? 'selected="selected"' : ''}}>{{$staffMember->name}}</option>
@endforeach
</select>
<input type="date" class="form-control" name="startDate" value="{{ $startDate }}">
<input type="date" class="form-control" name="endDate" value="{{ $endDate }}">

<button>Filter by selected staff member</button>
</form>

最新更新