Doctrine,subquery,参数号无效:绑定变量数与令牌数不匹配

时间:2015-07-14 18:15:09

标签: symfony doctrine-orm dql

当我在select子句中的子查询中使用命名参数时,我收到此错误:

参数号无效:绑定变量数与令牌数不匹配

如果我使用QueryBuilder重写查询,可能会出现此错误。但我喜欢看我的风格的DQL语句:

$dql = 'SELECT u,
            (SELECT count(e1.id)
               FROM FrontendBundle:Entrega e1
               JOIN e1.usuario u1 
              WHERE u1.id = u.id
                AND e1.programa = :programaId) AS numentregas

          FROM FrontendBundle:Usuario u
          WHERE EXISTS (SELECT mat FROM FrontendBundle:Matricula mat
                            WHERE mat.centro = :centroId
                            AND mat.usuario = u.id)
         ';

$consulta = $this->getEntityManager()->createQuery($dql);

$consulta->setParameter('programaId', $programaId);
$consulta->setParameter('centroId', $centroId);

我总是使用这种代码结构。但在这种情况下,当我在select-subquery中使用“:programaId”时,我得到了错误。

但是,令人惊讶的是,where-subselect中的“:centroId”可以使用。

不要试图分析完整的选择,我已经削减了一些不重要的部分。 谢谢

1 个答案:

答案 0 :(得分:0)

如果你想在不使用查询构建器的情况下运行查询,我建议使用php内置的PDO:

http://php.net/manual/en/book.pdo.php

try {
    $sql = 'SELECT u,
            (SELECT count(e1.id)
               FROM FrontendBundle:Entrega e1
               JOIN e1.usuario u1
              WHERE u1.id = u.id
                AND e1.programa = :programaId) AS numentregas
            FROM FrontendBundle:Usuario u
           WHERE EXISTS (SELECT mat FROM FrontendBundle:Matricula mat
                            WHERE mat.centro = :centroId
                            AND mat.usuario = u.id)';

    $sth = $this->getEntityManager()->getConnection()->prepare($sql);
    $sth->bindParam(':programaId', $programaId);
    $sth->bindParam(':centroId', $centroId);

    $sth->execute();

    return $sth->fetchAll();
} catch (\PDOException $e) {
    return false;
}
相关问题