7 Stimmen

Kann ich das Schlüsselwort "ON" in DQL verwenden oder muss ich Native Query verwenden?

Ich habe eine oneToMany-Beziehung zwischen Post und PostVote. Ich möchte in der Lage sein, einen Post und die Abstimmung eines bestimmten Benutzers dazu abzurufen. In DQL möchte ich den Post und die zugehörige PostVote-Entität abrufen, aber nur dort, wo user_id z. B. 5 ist.

Es scheint, dass ich das ON-Schlüsselwort in SQL nicht wie folgt verwenden kann:

->createQuery('SELECT p, pv FROM Post p LEFT JOIN p.postvotes ON pv.user = :userid WHERE p.id = :postid')

Und wenn ich WHERE verwende, um die Ergebnisse zu filtern, entsteht ein Problem und es wird kein Ergebnis angezeigt, es sei denn, mindestens ein PostVote-Objekt vorhanden ist:

->createQuery('SELECT p, pv FROM Post p LEFT JOIN p.postvotes WHERE p.id = :postid' AND pv.user = :userid)

Ist Native Query der einzige Weg, um dies zu erreichen?

19voto

K. Norbert Punkte 10316

Sie müssen das WITH-Schlüsselwort in DQL verwenden, um dies zu erreichen:

SELECT p, pv FROM Post p LEFT JOIN p.postvotes WITH pv.user = :userid WHERE p.id = :postid

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X