Desidero selezionare membri che non sono in servizio specifico. Ho 3 tabelle:Sottoquery in doctrine2 notIN Funzione
membre
service
membre_service
(rapporto tramembre
eservice
)
sto usando la dottrina 2 e in SQL la mia domanda è:
SELECT m.* FROM membre m WHERE m.`id` NOT IN (
SELECT ms.membre_id FROM membre_service ms WHERE ms.service_id != 29
)
In Doctrine, I d o:
$qb = $this->_em->createQueryBuilder();
$qb2 = $qb;
$qb2->select('m.id')
->from('Custom\Entity\MembreService', 'ms')
->leftJoin('ms.membre', 'm')
->where('ms.id != ?1')
->setParameter(1, $service);
$qb = $this->_em->createQueryBuilder();
$qb->select('m')
->from('Custom\Entity\Membre', 'm')
->where($qb->expr()->notIn('m.id', $qb2->getDQL())
);
$query = $qb->getQuery();
//$query->useResultCache(true, 1200, __FUNCTION__);
return $query->getResult();
ho ottenuto il seguente errore:
Semantical Error] line 0, col 123 near 'm WHERE ms.id': Error: 'm' is already defined.
Grazie per la risposta! MembreService è già in molti-a-molti ... Mi hai davvero aiutato! E vedi la mia modifica per la risposta finale. May God Bless You ... –
Se si utilizzano i parametri nella sottoquery: $ qb-> setParameters ($ qb2-> getParameters()); è necessario, sebbene tu possa volere $ qb-> setParameters (array_merge ($ qb2-> getParameters(), $ qb-> getParameters())) per evitare di sovrascrivere i parametri dalla query esterna. – Omn
Hmmm ... prendi il mio ultimo commento con un pizzico di sale, che sembra funzionare solo in alcune versioni della dottrina ... in altre versioni setParameters sostituisce piuttosto che aggiunge ai parametri ... – Omn