Symfony2 Doctrine 查询生成器 where IN

问题描述 投票:0回答:2

我在谷歌上浪费了数万亿个小时,但没有一个解决方案是好的。

我有这个查询生成器:

        $qb2=$this->createQueryBuilder('s')
        ->addSelect('u')
        ->innerJoin('s.user','u')
        ->where("u.id IN(:followeeIds)")
        ->andWhere('s.admin_status = false')
        ->setParameter('user', $user)
        ->setParameter('followeeIds', $arrayFolloweeIds)
        ->orderBy('s.id','DESC')
        ->setMaxResults(15)
    ;

我可以进行第二次查询,然后像

$qb->getDQL()
那样做,但是我会缓存查询吗?

错误:

Invalid parameter number: number of bound variables does not match number of tokens
doctrine dql query-builder
2个回答
76
投票

您正在设置用户参数,但我没有看到它在任何地方的查询中使用?

我还遇到了

WHERE IN
和 Doctrine
QueryBuilder
与数组的问题,会给我类似的错误,奇怪的是,在绑定参数之前运行
array_values
似乎也解决了这些问题。

尝试:

$qb2=$this->createQueryBuilder('s')
        ->addSelect('u')
        ->innerJoin('s.user','u')
        ->where("u.id IN(:followeeIds)")
        ->andWhere('s.admin_status = false')
        ->setParameter('followeeIds', array_values($arrayFolloweeIds))
        ->orderBy('s.id','DESC')
        ->setMaxResults(15)
    ;

5
投票

在 Symfony2.8 中,以下示例对我有帮助

...
$qb2->where(
     $qb2->expr()->in('u.id', ':ids')
)
->setParameter('ids', $ids_array)
...
© www.soinside.com 2019 - 2024. All rights reserved.