在Laravel中基于daterangepicker实现数据日期范围筛选
日期范围筛选功能实现方案
第一步:修改前端JS代码,传递日期参数
你原来的axios请求没有携带选中的起止日期参数,所以后端拿不到任何请求参数,修改daterangepicker的回调函数如下:
$(function() { $('input[name="daterange"]').daterangepicker({ "startDate": "11/01/2021", "endDate": "11/07/2021", opens: 'left' }, function(start, end, label) { console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); // 新增参数传递,把格式化后的起止日期传给后端 axios.get('/fetchdata', { params: { startDate: start.format('YYYY-MM-DD'), endDate: end.format('YYYY-MM-DD') } }).then(response => { // 这里根据你的业务需求处理返回的数据,比如更新页面列表 console.log(response.data); }) }); });
第二步:优化后端控制器代码
你原来的控制器里存在多个前置return语句,后续筛选逻辑根本不会执行,而且还有变量名笔误,修改后的代码如下:
public function fetch_data(Request $request) { // 先注释掉所有测试用的前置return语句 // return 'test'; // return $request->all(); // return $request->daterange; $user = Auth::user(); $storesID = $user->storesID->pluck('id'); $stores = $user->stores; // 从请求中获取前端传过来的起止日期参数 $startDate = $request->input('startDate'); $endDate = $request->input('endDate'); // 注意:你原来的where条件里两个字段名不一致,一个是request_date一个是date,这里统一改成request_date,根据你的实际表字段调整 $accessories = AccessoryRequest::where('request_date', ">=", $startDate) ->where('request_date', "<=", $endDate) ->get(); // 如果是接口请求返回json,就用下面这句 return response()->json([ 'stores' => $stores, 'accessories' => $accessories ]); // 如果是返回页面视图,就注释上面的json返回,用下面这句 // return view('accessorydetails.index') // ->with('stores', $stores) // ->with('accessories', $accessories); }
可选方案:后端拆分日期范围字符串
如果你不想在前端拆分参数,要直接传01/01/2021 - 01/15/2021格式的完整日期范围字符串给后端,可以把前端axios的参数改为daterange: $('input[name="daterange"]').val(),后端按如下逻辑拆分即可:
$dateRange = $request->input('daterange'); list($startStr, $endStr) = explode(' - ', $dateRange); $startDate = \Carbon\Carbon::createFromFormat('m/d/Y', $startStr)->format('Y-m-d'); $endDate = \Carbon\Carbon::createFromFormat('m/d/Y', $endStr)->format('Y-m-d');
后续筛选逻辑和上述第二步一致即可。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

