You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Yii2 ORM构建排除col1和col2均为0的查询语句

用Yii2 ORM实现指定查询逻辑

没问题,这两种写法都能完美实现你的需求,而且完全符合Yii2 ORM的最佳实践:

方法一:直接对应原SQL的OR嵌套条件

如果你想严格对应原SQL的AND (col1 <> 0 OR col2 <> 0)逻辑,可以用Yii2查询构建器的嵌套OR条件写法:

// 假设你的模型类是TableModel
$query = TableModel::find()
    // 先添加你的基础条件 [some conditions]
    ->where(['status' => 1, 'category' => 'default']) // 示例条件,替换成你的实际条件
    // 再添加排除逻辑:col1不等于0 或者 col2不等于0
    ->andWhere(['or',
        ['<>', 'col1', 0],
        ['<>', 'col2', 0],
    ]);

这个写法会生成和你原SQL完全一致的条件部分,Yii2会自动把数组里的or作为逻辑运算符,将后面的两个不等于条件用OR连接,并且整体作为AND的子条件。

方法二:用NOT排除同时为0的情况

另一种更直观的写法是直接表达“排除col1和col2同时为0的记录”,逻辑上和原SQL等价,代码更简洁:

$query = TableModel::find()
    ->where(['status' => 1, 'category' => 'default']) // 你的基础条件
    ->andWhere(['not', ['col1' => 0, 'col2' => 0]]);

这个写法对应的SQL是AND NOT (col1 = 0 AND col2 = 0),和原SQL的逻辑完全一致,而且代码可读性更高,推荐这种写法。

两种方式都不需要用到EXCEPT命令,完全通过Yii2的ORM查询构建器实现,你可以根据自己的习惯选择其中一种。

内容的提问来源于stack exchange,提问作者MiglyCH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:10:40