symfony - Doctrine内部查询设置参数

标签 symfony doctrine-orm

我试图执行内部查询并设置参数但没有成功,我总是得到:

Invalid parameter number: number of bound variables does not match number of tokens

这是我的查询:

SELECT i2
FROM MyBundle:Identity i2
INNER JOIN MyBundle:Property\\Mapped\\Email propertyEmail WITH propertyEmail.identity = i2
INNER JOIN MyBundle:Channel channel WITH propertyEmail.channel = channel
WHERE ( 
    SELECT COUNT(mappedEmail)
    FROM MyBundle:Property\\Mapped\\Email mappedEmail
    WHERE mappedEmail.identity = i2  
    AND mappedEmail.channel = :channel 
    AND mappedEmail.createdAt <= :dateFrom
 ) > 0  
 AND IDENTITY(propertyEmail.channel) <> :channel
 AND propertyEmail.createdAt <= :dateFrom
 GROUP BY i2

这就是我作为子查询的方式:

$innerQuery = $queryBuilder->getEntityManager()->createQuery($query)
    ->setParameters([
        'channel' => $channelId,                             
        'dateFrom' => $dateFrom
    ])
;
$queryBuilder->andWhere($queryBuilder->expr()->notIn($alias, $innerQuery->getDQL()));

返回错误:

Invalid parameter number: number of bound variables does not match number of tokens

如果我将查询作为单个查询执行,则一切正常。
感谢您的建议。

最佳答案

尝试将参数应用到主查询,如下所示:

$innerQuery = $queryBuilder->getEntityManager()->createQuery($query);

$queryBuilder
 ->andWhere($queryBuilder->expr()->notIn($alias, $innerQuery->getDQL()))
  ->setParameters([
        'channel' => $channelId,                             
        'dateFrom' => $dateFrom
    ]);

关于symfony - Doctrine内部查询设置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042369/

相关文章:

php - 手动编写 DQL

php - Doctrine2 为多对多关系生成两个额外的表

php - 使用 createNativeQuery 连接两个没有外键的实体

mysql - 使用 DQL 对 bool 列进行 COUNT 查询

php - docker 安装并启用 php 扩展

php - 在查询sql中比较字符串和数组

php - Doctrine 不创建自动 UUID

symfony2 : trying to load fixtures using hautelook/alicebundle

symfony - 使用 Symfony2 的 Behat 3,使用开发环境的 api 测试

php - Symfony 使用 BeSimple/BeSimpleI18nRoutingBundle 重复路由翻译路由