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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:02:02