Php 使用雄辩的查询筛选器返回所有记录

Php 使用雄辩的查询筛选器返回所有记录,php,laravel,eloquent,Php,Laravel,Eloquent,我正在构建一个表单,允许用户从几个选项中进行选择,并根据这些选项从数据库中检索结果。我已经成功地创建了查询过滤器,但是当我想添加“从所有时间选择记录”选项而不是按特定年份选择记录时,遇到了问题 我的代码如下: $order = (new Order)->newQuery(); if ($request->has('report')) { if($request->report === 'all') { $order->wh

我正在构建一个表单,允许用户从几个选项中进行选择,并根据这些选项从数据库中检索结果。我已经成功地创建了查询过滤器,但是当我想添加“从所有时间选择记录”选项而不是按特定年份选择记录时,遇到了问题

我的代码如下:

$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进行过滤,那么默认情况下它应该返回所有项目,但这不会发生。我刚刚收到一个空白结果


有什么想法吗?

如果您不需要一直添加任何筛选,那么您可以忽略它或将If块留空

if(isset($request->allTime)) { }
您还应该修复
$request->has('year')!==null
,因为它看起来像一个条件中的两个条件 $request->has('year')始终返回true或false,具体取决于请求中是否存在年份。true或false永远不会为==null

$request->has('year') && $request->year !== null

如果您不需要一直添加任何筛选,那么您可以忽略它或将If块留空

if(isset($request->allTime)) { }
您还应该修复
$request->has('year')!==null
,因为它看起来像一个条件中的两个条件 $request->has('year')始终返回true或false,具体取决于请求中是否存在年份。true或false永远不会为==null

$request->has('year') && $request->year !== null

嘿,这就是我想的,但如果我这样做,它只是返回一个空结果。如果我明确地将所有年份添加为一个范围,那么它将返回结果,但默认情况下它不会返回任何结果。如果您修复
$request->has('year')!=空值
取决于您的Laravel版本<代码>已填充与已填充不同<代码>?var=将为
$request->has(“var”)
生成一个true,但是
$request->filled(“var”)
将为false。嘿,Blake。谢谢你。我不知道。将用于未来的代码:)嘿,这是我的想法,但如果我这样做,它只是返回一个空结果。如果我明确地将所有年份添加为一个范围,那么它将返回结果,但默认情况下它不会返回任何结果。如果您修复
$request->has('year')!=空值
取决于您的Laravel版本<代码>已填充与已填充不同<代码>?var=将为
$request->has(“var”)
生成一个true,但是
$request->filled(“var”)
将为false。嘿,Blake。谢谢你。我不知道。将用于将来的代码:)