Je rencontre des problèmes pour obtenir mes résultats avec le générateur de requête de doctrine, dans une application Symfony 2.8:Doctrine query builder ne donne pas tous les résultats: many-to-many recherche id (x, y)
J'ai ici 3 entités:
- Chanson
- Artiste
- Catégorie
Tout fils gs au moins 1 artiste et 1 catégorie
Chanson a ManyToMany relation avec Artiste et ManyToMany avec Catégorie aswell
Je voudrais obtenir les entités de chansons ayant la mêmes artistes OU catégories qu'une chanson donnée à cette fonction:
public function findRelatedSongs($song)
{
$em = $this->getEntityManager();
$artistsIds = $this->getArtistsIds($song);
//returns a string like '1,2,3'
$categoriesIds = $this->getCategoriesIds($song);
//returns a string like '1,2,3'
$q = $em->getRepository("BeatAdvisorBundle\Entity\Song")
->createQueryBuilder('s')
->join('s.artists', 'a')
->join('s.categories', 'c')
->where('a.id in (:artistsIds)')
->orWhere('c.id in (:categoriesIds)')
->andWhere('s.id <> :songId')
->setParameter('artistsIds', $artistsIds)
->setParameter('categoriesIds', $categoriesIds)
->setParameter('songId', $song->getId())
->getQuery();
$sql = $q->getSql();
// here I can read the sql query generated
$result = $q->setMaxResults(16)
->getResult();
return $result;
}
Il me rend les chansons liées sur les mêmes artistes, mais pas sur les catégories.
Y at-il un problème avec la façon dont j'ai écrit ceci?
Si je copier et coller la requête SQL, le réglage des paramètres Ids comme something_id in (1,2)
cela fonctionne bien ...
EDIT
Maintenant, je sais que cette chanson-A ayant seul artiste-x correspondre à certaines chansons ayant seulement artist-x; même pour les catégories. peut être un problème de type (string VS int) causant des problèmes avec in(x,y)
au lieu de in (x)
? ...
va essayer ce .. ty –
Même résultat ... il pourrait y avoir quelque chose ailleurs ... –