Doctrine Query Builder添加多条件andWhere时触发断言错误
问题:Doctrine QueryBuilder 添加条件触发断言错误
原条件判断代码
if (!empty($requestData['year'])) { $conditions[] = $qb->expr()->eq('dd.year', $requestData['year']); } if(!empty($requestData['month'])){ $conditions[] = $qb->expr()->eq('dd.month', $this->convertMonthStringToNumber($requestData['month'])); }
尝试的解决方案
$andX = $qb->expr()->andX(); $andX->addMultiple($conditions); $qb->andWhere($andX);
触发的错误
assert($lookahead !== null) in [SERVER]\vendor\doctrine\orm\src\Query\Parser.php (line 2639)
问题原因及解决办法
这个错误的核心原因是:当$requestData中的year和month都为空时,$conditions数组是空的,此时$andX没有添加任何查询条件就被传入andWhere,Doctrine的查询解析器无法处理空的AND表达式,从而触发断言错误。
解决方法很简单,只需要在构建并添加andX之前,先判断$conditions是否非空:
if (!empty($conditions)) { $andX = $qb->expr()->andX(); $andX->addMultiple($conditions); $qb->andWhere($andX); }
这样就能避免在没有任何条件时向QueryBuilder添加空的AND表达式,从根本上解决这个断言错误。
内容的提问来源于stack exchange,提问作者Anastasia Sitnina
相关产品推荐
相关产品推荐

