【问题标题】:Refactor Laravel Eloquent Query重构 Laravel Eloquent 查询
【发布时间】:2020-07-18 09:18:41
【问题描述】:

我想过滤来自 eloquent laravel 的数据。在我看来,我有 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();
        }

因为我有 4 个输入,所以条件的状态数等于 16,代码很乱。

有人有重构代码的想法吗?

【问题讨论】:

    标签: laravel laravel-5 eloquent refactoring


    【解决方案1】:

    想法:如果设置了变量,则检查它。否则不

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

    $builder = Tender::query();
    if($start_publish) $builder->where('published_at','>=',$start_publish);
    if($start_close) $builder->where('closed_at','>=',$start_close);
    ...
    return $builder->get()
    

    ....等等

    【讨论】:

    • 这正是我想要的。谢谢
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 2021-08-17
    • 2017-10-22
    • 2018-10-27
    • 2016-03-30
    • 2016-02-09
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多