Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从查询生成器中删除参数?_Mysql_Symfony_Doctrine Orm - Fatal编程技术网

Mysql 如何从查询生成器中删除参数?

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');

我的查询生成器有问题。我用的是symfony。我想完成的是:我有一个给定的查询生成器,我想根据这个查询计算所有行。因此,我研究了以下解决方案:

$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显然不应该,或者我们找错了地方。