Aber das funktioniert nicht. Ich bekomme immer noch einen Fehler:
Fehler: Identifikationsvariable TPost im Join-Pfadausdruck verwendet, aber vorher nicht definiert.
Ich habe nach dieser Fehlermeldung gesucht und alle haben geantwortet, den Tabellenalias + Attribut wie p.someAttribute zu verwenden. Aber der Tisch, dem ich beitreten möchte, ist nicht mit dem Tisch verwandt, an dem ich meine Auswahl beginne.
Als normale MySQL-Abfrage würde ich es so schreiben:
SELECT * FROM t_group_publication_rel gpr
INNER JOIN t_post p
WHERE gpr.content_id = p.content_id
Irgendwelche Ideen, was ich falsch mache?
Wir können DQL verwenden, um einen Join mit nicht verwandten Objekten durchzuführen? Ich weiß nicht. Wenn möglich, ist es interessant =).
– sensorario
20. Juni 2012 um 9:41 Uhr
Warum gehst du nicht einfach bauen eine Beziehung zwischen diesen beiden, wenn Sie sich ihnen anschließen möchten?
– dan-lee
20. Juni 2012 um 9:45 Uhr
In diesem Fall würde eine Beziehung nicht ausreichen. Ich bräuchte Relationen zu 3 verschiedenen Tabellen und jeder Datensatz könnte nur einen Verweis auf 1 dieser 3 setzen.
– 0s1r1s
20. Juni 2012 um 10:06 Uhr
Ist es langsamer, wenn ich die Find-Methoden in meinem Controller verwende, anstatt eine Abfrage zu erstellen? Ich würde ja sagen, weil es viel mehr Abfragen im Hintergrund gibt, oder?
– 0s1r1s
20. Juni 2012 um 10:08 Uhr
Also ich meine nicht nur 1 Find-Methode. Die Kombination von 2 verschiedenen Funden in einer Schleife.
– 0s1r1s
20. Juni 2012 um 10:08 Uhr
Heute habe ich an einer ähnlichen Aufgabe gearbeitet und mich daran erinnert, dass ich dieses Problem eröffnet habe. Ich weiß nicht, seit welcher Version der Doktrin es funktioniert, aber im Moment können Sie den untergeordneten Klassen problemlos in der Vererbungszuordnung beitreten. Eine Abfrage wie diese funktioniert also ohne Probleme:
Ich starte die Abfrage in meiner übergeordneten Klasse, die Vererbungszuordnung verwendet. In meinem vorherigen Beitrag war es ein anderer Ausgangspunkt, aber das gleiche Problem, wenn ich mich recht erinnere.
Da es ein großes Problem war, als ich mit dieser Ausgabe begann, denke ich, dass es auch für andere Leute interessant sein könnte, die nichts davon wissen.
Vielen Dank ! Das hat wirklich geholfen, ich habe stundenlang gesucht.
– Assil
27. März 2014 um 22:47 Uhr
wenn ich nicht habe MyBundleName:ChildTwo Repository, ich möchte eine Abfrage mit Tabellennamen schreiben, was ist dann die Lösung.?
– Mohammad Farid
11. Juli 2016 um 12:22 Uhr
@MohammadFareed Der Verweis auf die Entität ist kein Repository, es ist entweder ein String in der Form ‘:‘ ODER der FQCN der Entitätsklasse, zB \AppBundle\Entity\ChildTwo::class
– Levente Pánczél
8. Oktober 2016 um 17:40 Uhr
Was ist der Unterschied zwischen der Verwendung von WITH oder ON?
– Moll
27. August 2021 um 2:26 Uhr
Jamir
Joins zwischen Entitäten ohne Assoziationen waren bis Version 2.4 nicht möglich, wo Sie einen beliebigen Join mit der folgenden Syntax generieren können:
$query = $em->createQuery('SELECT u FROM User u JOIN Blacklist b WITH u.email = b.email');
Das ist fantastisch! Notiere dass der WITH -Klausel ist in diesem Fall erforderlich, sonst führt dies zu einem Syntaxfehler. Sie können jedoch einfach eine Dummy-Bedingung verwenden und im Wesentlichen einen echten Cross Join erhalten, den DQL sonst nicht unterstützt. Zum Beispiel: SELECT u FROM User u JOIN Items i WITH 0 = 0. Dies kann für komplexe Statistiken nützlich sein.
– jlh
25. Januar 2018 um 9:03 Uhr
Jzapata
$dql = "SELECT
a, md.fisrtName , md.LastName, mj
FROM MembersBundle:Memberdata md
INNER JOIN MembersBundle:Address a WITH md = a.empID
INNER JOIN MembersBundle:Memberjob mj WITH md = mj.memberData
...
WHERE
a.dateOfChange IS NULL
AND WHERE
md.someField = 'SomeValue'";
return $em->createQuery( $dql )->getResult();
Obwohl diese Antwort keine erforderlichen Details enthält, gibt es nichts zu zitieren, da die Dokumentation von Doctrine diese Arten von Verknüpfungen vollständig nicht abdeckt. Das hat bei mir funktioniert. Ich kenne genug SQL, um zu analysieren, was beabsichtigt war, und nicht genug Doktrin, um die Punkte zu verbinden.
– Eierspeisen
27. Juli 2016 um 16:31 Uhr
Ein DQL-Join funktioniert nur, wenn in Ihrem Mapping eine Zuordnung definiert ist. In Ihrem Fall würde ich sagen, dass es viel einfacher ist, eine native Abfrage durchzuführen und zu verwenden ResultSetMapping um Ihre Objekte zu füllen.
12878700cookie-checkSymfony 2: INNER JOIN bei nicht verwandten Tabellen mit Doktrin-Abfrage-Builderyes
Wir können DQL verwenden, um einen Join mit nicht verwandten Objekten durchzuführen? Ich weiß nicht. Wenn möglich, ist es interessant =).
– sensorario
20. Juni 2012 um 9:41 Uhr
Warum gehst du nicht einfach bauen eine Beziehung zwischen diesen beiden, wenn Sie sich ihnen anschließen möchten?
– dan-lee
20. Juni 2012 um 9:45 Uhr
In diesem Fall würde eine Beziehung nicht ausreichen. Ich bräuchte Relationen zu 3 verschiedenen Tabellen und jeder Datensatz könnte nur einen Verweis auf 1 dieser 3 setzen.
– 0s1r1s
20. Juni 2012 um 10:06 Uhr
Ist es langsamer, wenn ich die Find-Methoden in meinem Controller verwende, anstatt eine Abfrage zu erstellen? Ich würde ja sagen, weil es viel mehr Abfragen im Hintergrund gibt, oder?
– 0s1r1s
20. Juni 2012 um 10:08 Uhr
Also ich meine nicht nur 1 Find-Methode. Die Kombination von 2 verschiedenen Funden in einer Schleife.
– 0s1r1s
20. Juni 2012 um 10:08 Uhr