我正在构建一个表单,允许用户从多个选项中进行选择,并根据这些选项从DB中检索结果。我在创建查询过滤器方面取得了成功,但在我想要添加选项时,我遇到了问题,并且从所有时间选择记录'而不是特定年份。
我的代码如下:
$order = (new Order)->newQuery();
if ($request->has('report')) {
if($request->report === 'all') {
$order->where('status', 'approved')
->orWhere('status', 'pending')
->orWhere('status', 'denied');
} else {
$order->where('status', $request->report);
}
}
if($request->has('supervisors')) {
$order->where(function($query) use ($request) {
foreach ($request->supervisors as $key => $supervisor) {
if ($key == 0) {
$query->where('supervisor_id', $supervisor);
} else {
$query->orWhere('supervisor_id', $supervisor);
}
}
});
}
if($request->dateFrom !== null) {
$order->whereBetween('created_at',
[
Carbon::parse($request->dateFrom),
Carbon::parse($request->dateTo)
]);
} elseif($request->has('year') !== null) {
$order->whereYear('created_at', $request->year);
}
if(isset($request->allTime)) {
$order;
}
return $order->get();
有问题的部分在这里:
if(isset($request->allTime)) {
$order;
}
我的理解是,如果没有对dateFrom或Year进行过滤,那么它应该默认返回所有项目,但这不会发生。我收到一个空白的结果。
有什么想法吗?
答案 0 :(得分:2)
如果您不需要一直添加任何过滤,那么您可以省略它或将if块留空
if(isset($request->allTime)) { }
您还应该修复$request->has('year') !== null
,因为它看起来像是两个条件
$ request-> has('year')总是返回true或false,具体取决于Request中是否存在年份。 true或false永远不会== null
$request->has('year') && $request->year !== null