【问题标题】:Doctrine query builder - Too few parametersDoctrine 查询生成器 - 参数太少
【发布时间】:2018-03-03 09:53:16
【问题描述】:

我做了一个 Doctrine 查询生成器查询,但出现了这个错误:

Too few parameters : The query defines 3 parameters but you only bound 2.

我查看了查询并尝试了一些重构,但我找不到代码错误的地方。

查询:

$query = $this->_em->createQueryBuilder();
$query->select('m')
      ->from(Matiere::class, 'm')
      ->join('m.ues', 'ue')
      ->andWhere($query->expr()->eq('ue.semester', ':semestre'))
      ->setParameter('semestre', $semestre);

if (count($UEs) === 1) {
    $query->andWhere($query->expr()->neq('ue.id', ':ueSpe'))
          ->setParameter('ueSpe', $UEs);
}
else {
    $ueM = $UEs[0];
    $ueP = $UEs[1];
    $query->andWhere($query->expr()->neq('ue.id', ':ueM'))
          ->andWhere($query->expr()->neq('ue.id', ':ueP'))
          ->setParameters(['ueM' => $ueM, 'ueP' => $ueP]);
}
return $query->getQuery()->getResult();

【问题讨论】:

    标签: symfony doctrine dql


    【解决方案1】:
    $query = $this->_em->createQueryBuilder();
    $query->select('m')
          ->from(Matiere::class, 'm')
          ->join('m.ues', 'ue')
          ->andWhere($query->expr()->eq('ue.semester', ':semestre'))
          ->setParameter('semestre', $semestre);
    
    if (count($UEs) === 1) {
        $query->andWhere($query->expr()->neq('ue.id', ':ueSpe'))
              ->setParameter('ueSpe', $UEs);
    }
    else {
        $parameters[] = $UEs[0];
        $parameters[] = $UEs[1];
        $query->andWhere($qb->expr()->notIn('ue.id', ':parameters'))
              ->setParameter('parameters' => $parameters);
    }
    return $query->getQuery()->getResult();
    

    【讨论】:

      【解决方案2】:

      setParameters() 覆盖之前的任何setParameter() 调用。因此,您必须使用 setParameter 单独设置属性,或者使用 if 条件确保它们不重叠。

      【讨论】:

      • 这看起来更像是一个评论,因为它不包含解决 OP 问题所需的确切代码。有关更多信息,请参阅 StackOverflow.com/help。您的解释很好,并且始终建议在您的答案中包含这样的解释。随着未来的访问者学习一些东西来帮助他们自己的代码库,通常会随着时间的推移获得高质量的答案。考虑editing 也嵌入一个示例编码解决方案。
      • 这条评论对我很有帮助。如果您使用 ->addCriteria 将先前定义的条件添加到您的查询构建器,然后在此之后设置 setParameters,您也会遇到这个问题,如果您的 Criteria 中有任何参数(如果您使用表达式语言,它有)。
      猜你喜欢
      • 2014-10-15
      • 2018-09-12
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2013-03-11
      相关资源
      最近更新 更多