mysql - 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();
此查询的结果输出数据库中的所有记录。
我看不出我做错了什么。
解决方案
这段代码最终得到了想要的结果:
$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();
推荐阅读
- python - 如何用python制作翻译器?
- amazon-web-services - aws Iam assumeRole 和 Get Temp 凭证使用 boto3 不会在 get_service_graph 中返回服务
- sql - 计算每日保真度
- flutter - Flutter 自定义 DropdownMenuItem
- docker - 在 Docker 容器中使用本地 SSH 密钥
- c# - 如何在 Razor 页面上动态构造 ajax url 操作字符串?
- c++ - 如何在 C++ 中删除重复的排列
- javascript - nodejs - 如何在分隔符后删除部分字符串
- c - 检查excec是否终止
- laravel - 多个 docker 代理通过单个 nginx docker 传递?