2016-07-19 8 views
0

Probleme beim Abrufen von ManytoOne-Beziehungen bei Verwendung von linker Verknüpfung.Verwendung linker Verknüpfung mit Query Builder-Doktrin

Bevor wurde mit dieser Abfrage für Konferenzen Ich versuche, mit Diffusion kommen nach links, die zur Diffusion in einer viele zu viele Beziehung zur Abfrage

$qb = $this->createQueryBuilder('u') 
->select('u.id,u.comment, 
IDENTITY(u.place) AS place_id, 
IDENTITY(u.sponsor) AS sponsor_id, 
IDENTITY(u.tour) AS tour_id, 
u.startat 
'); 

Jetzt gebunden ist.

$qbt = $this->createQueryBuilder('u') 
     ->select('u','c') 
     ->from('AppBundle:Conference', 'p') 
     ->leftJoin('p.diffusion', 'c'); 

jedoch diese Abfrage gibt nicht die u.place, u.sponsor und u.tour die ManyToOne Beziehungen sind.

+1

was macht es zurückgeben? – Splendonia

+0

Angenommen, Sie haben alle Ihre Beziehungen eingerichtet, dann werden die von Ihnen erwähnten Entitäten faul geladen. Natürlich wählst du dich nie wirklich aus, so dass die Abfrage nicht funktionieren wird. – Cerad

+0

Persönlich "hasse" ich QueryBuilder (oder sogar DQL), wenn ich mit Joins umgehen muss. Ich gehe mit der NativeQuery-Klasse. http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/native-sql.html Ich hoffe @Cerad interveniere hier und teile uns seine Gedanken dazu mit. –

Antwort

1

leftJoin muss von "WITH" gefolgt werden. So zum Beispiel:

->leftJoin('p.diffusion', 'p', 'WITH', 'p.user=u.id', 'u.id'); 

Aber ich denke, es ist besser, beide Ihre Entitäten zu schreiben, damit ich Ihnen die genaue Antwort geben kann.

+2

Nun nein. DQL ist ein bisschen schlauer als SQL und leitet die WITH-Klausel von den Mapping-Daten ab. – Cerad

0

das Problem gefunden, hatte ich hinzufügen -> setHint (\ Lehre \ ORM \ Abfrage :: HINT_INCLUDE_META_COLUMNS, true) zum getQuery, weil getArrayResults standardmäßig nicht zurück Fremdschlüssel (den Ort, Sponsor und Tour).

Hier ist meine letzte Abfrage in der Konferenz-Repository

 $qbt = $this->_em->createQueryBuilder(); 
     $qbt->select('conference','diffusion') 
     ->from('AppBundle:Conference', 'conference') 
     ->leftJoin('conference.diffusion', 'diffusion'); 

    return $qbt 
     ->getQuery() 
     ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true) 
     ->useQueryCache(true) 
     ->useResultCache(true,3600) 
     ->getArrayResult(); 
Verwandte Themen