首页 > 解决方案 > Laravel Eloquent 多个 AND/OR 语句

问题描述

我正在尝试从该数据库中检索介于特定日期范围或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();

表结构: 在此处输入图像描述

桌子: 在此处输入图像描述

此查询的结果输出数据库中的所有记录。

我看不出我做错了什么。

标签: mysqllaraveleloquent

解决方案


这段代码最终得到了想要的结果:

$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();

推荐阅读