编写复杂的 Laravel eloquent where 语句
Composing complex Laravel eloquent where statement
我需要使用 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
(第二个复合 where 条件中缺少额外的括号)。
有什么想法吗?提前致谢。
这应该完成任务:
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();
我需要使用 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
(第二个复合 where 条件中缺少额外的括号)。
有什么想法吗?提前致谢。
这应该完成任务:
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();