查询 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();
当然,在查看了所有有用的答案之后,这终于奏效了。
$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 查询来根据日期获取结果。但日期会分别给出年月日。当我还为一个或多个输入传递 '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();
当然,在查看了所有有用的答案之后,这终于奏效了。
$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();