Laravel Eloquent,其中字段为 X 或 null

新手上路,请多包涵

我有一张这样的桌子:

 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 许可协议

阅读 649
1 个回答

听起来您需要使用 高级 where 子句

鉴于在 field1field2 中的搜索是不变的,我们将保持原样,但我们将稍微调整您在 datefield 中的搜索。

尝试这个:

 $query = Model::where('field1', 1)
    ->whereNull('field2')
    ->where(function ($query) {
        $query->where('datefield', '<', $date)
            ->orWhereNull('datefield');
    }
);

如果您需要调试查询并查看它为什么不工作,它可以帮助您查看它实际执行的 SQL。您可以将 ->toSql() 到 eloquent 查询的末尾以生成 SQL。

原文由 James 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题