【发布时间】:2020-06-04 00:18:29
【问题描述】:
情况如下。 该表有 2 个日期字段,最后一个日期可以为空。
在这个表中,当我将 2020-02-10 作为参数传递时,我想获取第一条和第二条记录。介于 start_end 和 end_date 之间,如果 end_date 为空,则大于 start_date。
如何为此做 Laravel 雄辩。提前谢谢你。
【问题讨论】:
情况如下。 该表有 2 个日期字段,最后一个日期可以为空。
在这个表中,当我将 2020-02-10 作为参数传递时,我想获取第一条和第二条记录。介于 start_end 和 end_date 之间,如果 end_date 为空,则大于 start_date。
如何为此做 Laravel 雄辩。提前谢谢你。
【问题讨论】:
这有点难看,但我认为这样的东西应该可以工作
Model::where(function($query) use ($date){
$query->where('start_date', '<=', $date)
->where('end_date', '>=', $date);
})->orWhere(function($query) use ($date) {
$query->where('start_date', '<=', $date)
->whereNull('end_date');
})->get()
编辑 由于您需要其他条件,因此您需要包装此条件
Model::query()
->where(function($query) use ($date) {
$query->where(function($query) use ($date){
$query->where('start_date', '<=', $date)
->where('end_date', '>=', $date);
})->orWhere(function($query) use ($date) {
$query->where('start_date', '<=', $date)
->whereNull('end_date');
})
})
->where('another_column', true)
->get()
```
【讨论】:
where 和orWhere 包装在另一个where(function($query){....} 中(三层深)将匿名函数视为括号。