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
相关产品推荐
相关产品推荐

