【问题标题】:How to do conditional query in Laravel如何在 Laravel 中进行条件查询
【发布时间】:2020-06-04 00:18:29
【问题描述】:

情况如下。 该表有 2 个日期字段,最后一个日期可以为空。

在这个表中,当我将 2020-02-10 作为参数传递时,我想获取第一条和第二条记录。介于 start_end 和 end_date 之间,如果 end_date 为空,则大于 start_date。

如何为此做 Laravel 雄辩。提前谢谢你。

【问题讨论】:

    标签: sql laravel eloquent


    【解决方案1】:

    这有点难看,但我认为这样的东西应该可以工作

    Model::where(function($query) use ($date){
        $query->where('start_date', '<=', $date)
            ->where('end_date', '>=',  $date);
    })->orWhere(function($query) use ($date) {
        $query->where('start_date', '<=', $date)
            ->whereNull('end_date');
    })->get()
    

    编辑 由于您需要其他条件,因此您需要包装此条件

    Model::query()
    ->where(function($query) use ($date) {
        $query->where(function($query) use ($date){
            $query->where('start_date', '<=', $date)
                ->where('end_date', '>=',  $date);
        })->orWhere(function($query) use ($date) {
            $query->where('start_date', '<=', $date)
                ->whereNull('end_date');
        })
    })
    ->where('another_column', true)
    ->get()
    ```
    

    【讨论】:

    • 感谢您的快速回答。如果我有其他字段,例如 is_deleted,我应该检查该字段如何实现多个条件?
    • 您需要将whereorWhere 包装在另一个where(function($query){....} 中(三层深)将匿名函数视为括号。
    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多