我正在尝试从该数据库检索属于特定日期范围或为NULL
的产品。此外,这些产品一定不能事先购买。
我的查询:
$offerings = Offering::with(['items' => function($query) use ($purchased, $dt) {
$query->whereNotIn('offering_items.id', $purchased)
->whereDate('offering_items.start_date', '<=', $dt->toDateString())
->whereDate('offering_items.end_date', '>=', $dt->toDateString())
->orWhereNull('offering_items.start_date')
->orWhereNull('offering_items.end_date');
}])->get();
表结构:
表:
该查询的结果输出数据库中的所有记录。
我看不到我在做什么错。
最佳答案
尝试将wheres
分组如下:
Offering::with(['items' => function($query) use ($purchased, $dt) {
$query->where(function($query){
$query->whereNull('start')->orWhereNull('end');
})->orWhere(function($query){
$query->whereDate('offering_items.start_date', '<=', $dt->toDateString())->whereDate('offering_items.end_date', '>=', $dt->toDateString())
})->whereNotIn('offering_items.id', $purchased)
}])->get();
关于mysql - Laravel Eloquent 多个AND/OR语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54200981/