查询 eloquent where 子句中的所有值

Posted

技术标签:

【中文标题】查询 eloquent where 子句中的所有值【英文标题】:Querying all values in eloquent where clause 【发布时间】:2022-01-17 12:30:07 【问题描述】:

我正在尝试编写一个基于日期获取结果的雄辩查询。但日期将分别给出年、月和日。当我还为一个或多个输入传递“全部”时,我希望查询能够正常工作(例如,如果一天被指定为“全部”,则一个月中的所有天)。我知道我可以使用不同的“if”组合来做到这一点,但我想有一些简单的方法来做到这一点。有什么办法吗?

这是我写的代码。

$year = $request->input('year');
$month = $request->input('month');
$day = $request->input('day');
$reports = DailyReport::whereYear('date', $year)
           ->whereMonth('date', $month)
           ->whereDay('date', $day)->get();

【问题讨论】:

不,我认为某种条件是必要的,例如使用when 【参考方案1】:

试试这个

$reports = DailyReport::when($request->has('year'), function ($query) use ($request) 
    $query->whereYear('date', $request->year);
)
    ->when($request->has('month'), function ($query) use ($request) 
        $query->whereMonth('date', $request->month);
    )
    ->when($request->has('day'), function ($query) use ($request) 
        $query->whereDay('date', $request->day);
    )->get();

laravel documentation

【讨论】:

【参考方案2】:

当然,在查看了所有有用的答案之后,这终于奏效了。

$year = $request->input('year');
$month = $request->input('month');
$day = $request->input('day');
$reports = DailyReport::when($year!='all', function ($query) use($year) 
               return $query->whereYear('date', $year);
           )
           ->when($month!='all', function ($query) use($month) 
               return $query->whereMonth('date', $month);
           )
           ->when($day!='all', function ($query) use($day) 
               return $query->whereDay('date', $day);
           )->get();

【讨论】:

以上是关于查询 eloquent where 子句中的所有值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

与where子句查询的Eloquent嵌套关系在false条件下返回集合

Laravel 4 Eloquent 动态 Where 子句

Laravel Eloquent 查询忽略列值

7_mysql查询之where子句