重构Laravel雄辩的查询

重构Laravel雄辩的查询,laravel,laravel-5,eloquent,refactoring,Laravel,Laravel 5,Eloquent,Refactoring,我想过滤从能言善辩的拉威尔那里得到的数据。我的视图中有4个日期选择器,我想知道每个日期选择器何时都已填充,并且查询的日期已更改。 这是我在控制器中的代码 if ($start_publish && $end_publish && $start_close && $end_close) { $data = Tender::where('published_at','>=',$start_publish)->

我想过滤从能言善辩的拉威尔那里得到的数据。我的视图中有4个日期选择器,我想知道每个日期选择器何时都已填充,并且查询的日期已更改。 这是我在控制器中的代码

if ($start_publish && $end_publish && $start_close && $end_close) {
                $data = Tender::where('published_at','>=',$start_publish)->where('published_at','<=',$end_publish)->where('closed_at','>=',$start_close)->where('closed_at','<=',$end_close);

}elseif (!$start_publish && $end_publish && $start_close && $end_close) {
                $data = Tender::where('published_at','<=',$end_publish)->where('closed_at','>=',$start_close)->where('closed_at','<=',$end_close);

} elseif ($start_publish && !$end_publish && $start_close && $end_close) {
                $data = Tender::where('published_at','>=',$start_publish)->where('closed_at','>=',$start_close)->where('closed_at','<=',$end_close);

} elseif (!$start_publish && !$end_publish && $start_close && $end_close) {
                $data = Tender::where('closed_at','>=',$start_close)->where('closed_at','<=',$end_close);

} elseif ($start_publish && $end_publish && !$start_close && $end_close) {
                $data = Tender::where('published_at','>=',$start_publish)->where('published_at','<=',$end_publish)->where('closed_at','<=',$end_close);
            }
            elseif ($start_publish && $end_publish && $start_close && !$end_close) {
                ...
                ...
                ...
        } else {
            $data = Tender::get();
        }

if($start\u publish&&$end\u publish&&$start\u close&&$end\u close){

$data=Tender::where('published_at','>=',$start_publish)->where('published_at','=',$start_close)->where('closed_at','>=',$start_publish)->where('closed_at','>=',$start_close)->where('closed_at','=',$start_close)->where('closed_at','closed",'('published_at','想法:如果设置了变量,则检查它,否则不检查

您可以试试这个(这是一个想法,而不是实际的代码)


…等等

这正是我想要的。谢谢
$builder = Tender::query();
if($start_publish) $builder->where('published_at','>=',$start_publish);
if($start_close) $builder->where('closed_at','>=',$start_close);
...
return $builder->get()