我需要使用Laravel Eloquent ORM执行以下MySQL查询:
select * from `events`
where `app_id` = 1
and ((`startDate` < now() and endDate is null) or (`endDate` < now()))
order by `startDate` desc
到目前为止我最好的尝试:
Event::where('app_id', '=', 1)
-> where(function ($query) {
$query -> where([['startDate', '<', Carbon::now() -> toDateTimeString()]) -> whereNull('endDate');
}) -> orWhere([['endDate', '<', Carbon::now() -> toDateTimeString()]])
-> orderBy('startDate', 'desc') -> get();
这不是我想要的结果:
select * from `events`
where `app_id` = 1
and (`startDate` < now() and endDate is null) or (`endDate` < now())
order by `startDate` desc
(在条件第二种化合物中缺少额外的括号)。
有什么想法吗?提前谢谢。
答案 0 :(得分:2)
这应该完成任务:
Event::where('app_id', '=', 1)
->where(function ($q) {
$q->where(function($query){
$query->where('startDate', '<', Carbon::now()->toDateTimeString())->whereNull('endDate');
})->orWhere('endDate', '<', Carbon::now()->toDateTimeString());
})
->orderBy('startDate', 'desc') -> get();