如何用Doctrine查询语言筛选refused列0与NULL值的行?
解决方法:获取
refused为0或NULL的行 这个问题我之前也碰到过~你现在的问题出在把两个条件用AND连起来了,这相当于要找**同时满足refused IS NULL和refused = 0**的行,当然找不到结果啦😉
下面给你两种可行的解决方案:
方案一:用OR组合两个条件
直接把两个条件用OR关联,同时注意用括号包裹(避免和其他WHERE条件产生逻辑冲突):
// 基础写法 $queryBuilder // 你的其他WHERE条件... ->andWhere('b.refused IS NULL OR b.refused = 0');
如果用Doctrine的表达式语法,可读性会更好(适合复杂查询):
use Doctrine\ORM\Query\Expr; $queryBuilder // 你的其他WHERE条件... ->andWhere( $queryBuilder->expr()->orX( 'b.refused IS NULL', 'b.refused = 0' ) );
方案二:排除refused = 1的行
因为你的refused字段只有0、1、NULL三种可能,所以直接排除值为1的行,剩下的自然就是0和NULL的行:
$queryBuilder // 你的其他WHERE条件... ->andWhere('b.refused != 1');
补充说明:SQL中
NULL != 1的结果是NULL,不会被!=过滤掉,所以这个写法刚好能保留所有refused为0或NULL的行,非常简洁。
内容的提问来源于stack exchange,提问作者Tony S
相关产品推荐
相关产品推荐

