获取开始日期后的数据



我使用以下查询来获取start dateend date之间存在的记录:

$event =Event::whereBetween('date', [
$request->start_date, $request->end_date
])->orderBy('date', 'desc')->paginate(5);

当我提供开始日期和结束日期时,这是工作的,但是,当我只提供开始日期时,那么我没有得到任何记录-但我想要在开始日期之后存在的记录,如果结束日期保持空白。

有什么建议吗?

Laravel为这个用例提供了条件子句

$events = Event::query()
->when(
$request->has('start_date') && $request->has('end_date'), 
function($query, $request) {
return $query->whereBetween('date', [
$request->start_date, $request->end_date
]);
}, 
function($query, $request) {
return $query->where('date', ' >=', $request->start_date);
}
)
->orderBy('date', 'desc')
->paginate(5);

@babak-asharfi答案的两个备选方案

使用when()


$event = Event::when($request->end_date, 
function($query) use ($request) {
$query->whereBetween('date', $request->start_date, $request->end_date);
},
function($query) use ($request){ 
$query->where('date', '=>', $request->start_date);
}
)->orderBy('date', 'desc')->paginate(5);

或者直接使用备用日期

$event = Event::whereBetween('date', [
$request->start_date, $request->end_date ?: '2999-12-31'
])->orderBy('date', 'desc')->paginate(5);

可以使用下面的代码

$query = Event::query();
if ($request->has('start_date')){
$query->whereBetween('date', [
$request->start_date, $request->end_date
]) 
}else{
$query->where('date', '>=', $request->start_date) 
}
$query->orderBy('date', 'desc')->paginate(5);

最新更新