Symfony2 Doctrine querybuilder, где IN - программирование
Подтвердить что ты не робот

Symfony2 Doctrine querybuilder, где IN

Я потерял триллион часов Google, но ни одно из решений не было хорошим.

У меня есть этот querybuilder:

        $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
4b9b3361

Ответ 1

Вы устанавливаете параметр пользователя, но я не вижу, чтобы он использовался в запросе где-нибудь?

Также у меня возникли проблемы с WHERE IN и Doctrine QueryBuilder с массивами, которые дали бы мне подобную ошибку, и, как ни странно, запуск array_values, прежде чем связывать параметр, как представляется, также решает эти проблемы.

Try:

$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)
    ;

Ответ 2

В Symfony2.8 следующий пример помогает мне

...
$qb2->where(
     $qb2->expr()->in('u.id', ':ids')
)
->setParameter('ids', $ids_array)
...