查询 eloquent where 子句中的所有值

Querying all values in eloquent where clause

我试图编写一个 eloquent 查询来根据日期获取结果。但日期会分别给出年月日。当我还为一个或多个输入传递 'all' 时,我希望查询能够正常工作(例如,如果日期指定为 'all',则一个月中的所有日期)。我知道我可以使用不同的 '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();

试试这个

$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

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

$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();