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
Ответы
Ответ 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)
...