Mysql 如何从查询生成器中删除参数?
我的查询生成器有问题。我用的是symfony。我想完成的是:我有一个给定的查询生成器,我想根据这个查询计算所有行。因此,我研究了以下解决方案:Mysql 如何从查询生成器中删除参数?,mysql,symfony,doctrine-orm,Mysql,Symfony,Doctrine Orm,我的查询生成器有问题。我用的是symfony。我想完成的是:我有一个给定的查询生成器,我想根据这个查询计算所有行。因此,我研究了以下解决方案: $aliases = $queryBuilder->getRootAliases(); $alias = array_values($aliases)[0]; $cloneQueryBuilder = clone $queryBuilder; $from = $cloneQueryBuilder->getDQLPart('from');
$aliases = $queryBuilder->getRootAliases();
$alias = array_values($aliases)[0];
$cloneQueryBuilder = clone $queryBuilder;
$from = $cloneQueryBuilder->getDQLPart('from');
$cloneQueryBuilder->resetDQLParts();
$newQueryBuilder = $cloneQueryBuilder
->select('count(' . $alias . '.id)')
->add('from', $from[0]);
$this->total = $newQueryBuilder->getQuery()->getSingleScalarResult();
但是我遇到了一个例外:
参数太多:查询定义了0个参数,而您绑定了1
有人知道如何解决吗?调用设置参数应覆盖所有现有参数。我不相信上述答案是正确的。如您所见,setParameters仅更新现有参数。它不会删除任何已设置的:
我找到的解决方案是迭代现有参数并将每个值设置为null
foreach($queryBuilder->getParameters() as $key=>$value){
$queryBuilder->setParameter($key,null);
}
太好了,它工作了!为什么我没有想到这一点。那么这是真的吗?据我所知,setParameters只更新现有参数的值或添加新参数。我似乎找不到任何方法来删除QueryBuilder中添加的参数。请参阅:hm,ORM\QueryBuilder
会更新并且不会覆盖DBAL\Query\QueryBuilder
覆盖。这取决于你用的是什么。作为参考:,实际上这也不起作用(据我所知,除非添加一个额外的方法,否则这是不可能的。我可以理解你的观点,但是你/我们如何解释我之前遇到的异常在@Joshua solution中消失的事实?无论如何,我想知道:P显然不应该,或者我们找错了地方。