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

Yii2查询中如何跳过translation字段为空的数据行?

解决Yii2查询中跳过translation字段为空行的问题

嗨,我来帮你搞定这个Yii2查询过滤的问题~要跳过d.translation为空的数据行,我们可以通过添加非空条件来实现,同时要考虑数据库里“空”可能是NULL或者空字符串两种情况,具体代码修改如下:

完整修改后的查询代码

$query = (new \yii\db\Query())
    ->select(['a.id', 'b.filter_item_id', 'c.id as fid', 'c.filter_id', 'd.translation'])
    ->from(['a' => 'product'])
    ->leftJoin(['b' => 'product_filter_item'], 'b.product_id = a.id')
    ->leftJoin(['c' => 'filter_item'], 'c.id = b.filter_item_id') // 补全你未写完的c表关联条件,替换成实际表名和关联字段
    ->leftJoin(['d' => 'translation_table'], 'd.related_id = c.id') // 替换成d表实际的关联字段和表名
    // 过滤translation为空的情况:先排除NULL,再排除空字符串
    ->where(['not', ['d.translation' => null]])
    ->andWhere(['!=', 'd.translation', '']);

关键说明

  • 过滤NULL值:where(['not', ['d.translation' => null]])会排除d.translation为NULL的行;
  • 过滤空字符串:andWhere(['!=', 'd.translation', ''])会排除d.translation是空字符串的行;
  • 如果需要强制关联d表:如果你的业务逻辑要求必须存在有效的d表数据(不能有未关联到d表的行),可以把最后一个leftJoin改成innerJoin,这样会自动过滤掉没有匹配d表的记录,再搭配上面的非空条件就更稳妥。

你可以根据数据库里实际存储的“空”类型(是NULL还是空字符串),选择保留其中一个条件或者两个都用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:12:06