我正在尝试从该数据库检索属于特定日期范围或为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();
此查询的结果输出数据库中的所有记录。
我看不到我在做什么错。
答案 0 :(得分:0)
尝试将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();
答案 1 :(得分:0)
此代码最终获得了预期的结果:
$offerings = Offering::with(['items' => function($query) use ($purchased, $dt) {
$query->where(function($query) use ($purchased) {
$query->whereNotIn('offering_items.id', $purchased);
})->where(function($query) use ($dt) {
$query->whereDate('offering_items.start_date', '<=', $dt->toDateString())
->orWhereNull('offering_items.start_date');
})->where(function($query) use ($dt) {
$query->whereDate('offering_items.end_date', '>=', $dt->toDateString())
->orWhereNull('offering_items.end_date');
});
}])->get();