douwei7501 2014-07-01 15:35
浏览 53
已采纳

Doctrine2 - 使用createQueryBuilder创建嵌套的SELECT语句 - “参数号无效...”

Context:

I am trying to convert this query

Select 
    *
FROM
    phases AS P
WHERE
    NOT EXISTS( SELECT 
            *
        FROM
            rating AS R
        WHERE
            R.phase_id = P.id AND R.user_id = 53)
LIMIT 1

into a couple of createQueryBuilder queries using this example

I have generated the following code:

    $subquery = $em->createQueryBuilder()
                ->select("r.id")
                ->from('AppDemoBundle:Rating', 'r')
                    ->innerjoin('r.user', 'u')
                    ->where('u.id = :_id')
                    ->setParameter('_id', 53)
                ->getDQL();
    $query = $em->createQueryBuilder()
                ->select('p')
                ->from('AppDemoBundle:Phases', 'p');
    $query->andWhere($query->expr()->notIn('p.id', $subquery));

    $phase = $query->getQuery()->getResult();

but I keep getting this error telling that the number of parameters is incorrect.

Doctrine\\ORM\\Query\\QueryException: Invalid parameter number: number of bound variables does not match number of tokens (uncaught exception) at C:\\wamp\\www\\demo\\vendor\\doctrine\\lib\\Doctrine\\ORM\\Query\\QueryException.php line 62

Question:

I would appreciate any help with this. It's my first time using the createQueryBuilder and I am not sure why this problem is happening. Thanks!

  • 写回答

1条回答 默认 最新

  • dongzen5577 2014-07-01 15:46
    关注

    You need to call setParameter on the outer query instead of the outer one. Since that's the one you end up running it seems logical.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 关于多单片机模块化的一些问题
  • ¥30 seata使用出现报错,其他服务找不到seata
  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取
  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection