我有一张这样的桌子:
table
- field1: tinyint
- field2: varchar (nullable)
- datefield: timestamp (nullable)
现在我想获取 field1 为 1、field2 为 null 且 datefield 小于 X 或 null 的所有条目。我已经尝试过这样的事情:
$query = Model::where('field1', 1)
->whereNull('field2')
->where('datefield', '<', $date)
->orWhereNull('datefield');
但这不起作用。我总是得到 datefield 为空的每个条目。其他字段是什么并不重要。我还尝试将其拆分为 2 个查询:首先获取 datefield 小于 X 或 null 的每一行,然后(基于它)获取 field1 为 1 且 field2 为 null 的每个字段。
结果是一样的。知道怎么做吗?
原文由 festie 发布,翻译遵循 CC BY-SA 4.0 许可协议
听起来您需要使用 高级 where 子句。
鉴于在
field1
和field2
中的搜索是不变的,我们将保持原样,但我们将稍微调整您在datefield
中的搜索。尝试这个:
如果您需要调试查询并查看它为什么不工作,它可以帮助您查看它实际执行的 SQL。您可以将
->toSql()
到 eloquent 查询的末尾以生成 SQL。