我有一张这样的桌子:

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为空的每个条目.其他字段是什么并不重要.我还try 将其拆分为两个查询:首先获取datefield小于X或null的每一行,然后(基于它)获取field1为1且field2为null的每一行.

结果是一样的.

推荐答案

听起来你需要使用advanced where clauses.

考虑到在field1field2中的搜索是恒定的,我们会让它们保持不变,但是我们会稍微调整一下您在datefield中的搜索.

试试这个:

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

如果您需要调试查询并查看它不工作的原因,那么查看它实际执行的是什么SQL会很有帮助.您可以将->toSql()链接到Eloquent 查询的末尾,以生成SQL.

Php相关问答推荐

在WooCommerce中执行一次银行电汇确认付款代码

允许Laravel路由指定`withTrashed`,尽管有显式的模型绑定

如何使用php-amqplib连接到ActiveMQ Classic Docker镜像

具有重叠捕获组的PHP正则表达式

获取要删除的图像的公共ID

闭包绑定$This和垃圾收集器

如何确保所有语言文件都使用Laravel中的新密钥进行更新?

无法使用php IMAP从Gmail获取收件箱

WooCommerce在购物车项目中复制产品而不增加产品数量

如何在laravel中添加延迟?

在WooCommercel邮箱通知上添加来自Apaczka插件的选定交付点

将自定义字段添加到管理产品中 WooCommerce 3.2+ 中的快速编辑

在 WooCommerce 订阅续订订单中设置送货方式

PHP 解析 XML 以获取多个深度的所有字符串值

使用 foreach php 将记录正确分配给正确的父级

安装 Herd 并返回 Valet 后为 502

在 vue 自定义渲染器中访问变量

当所有对象都属于同一类型时,我可以省略 PHP in_array() 中的 strict 参数吗?

Shopware 6 AuthControllerDecorator已弃用

symfony/notifier + twig/inky-extra 在 dunglas/symfony-docker 中缺少 ext-xsl.