web-dev-qa-db-fra.com

Symfony2 Doctrine constructeur de requêtes où IN

J'ai perdu des heures trilion sur Google, mais aucune des solutions n'était bonne.

J'ai ce constructeur de requêtes:

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

Je pourrais faire une deuxième requête puis faire comme $qb->getDQL() mais aurais-je mis en cache la requête?

Erreur:

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

Vous définissez le paramètre utilisateur mais je ne vois pas qu'il soit utilisé dans la requête nulle part?

J'ai également eu des problèmes avec WHERE IN et Doctrine QueryBuilder avec des tableaux me donnerait une erreur similaire, et curieusement exécutant array_values avant de lier le paramètre semble également résoudre ces problèmes.

Essayer:

$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)
    ;
55
Ghassan Idriss

Dans Symfony2.8, l'exemple suivant m'aide

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