Løsning 1:Doktrin Native SQL
En måde at opnå dette på er ved at bruge native MySQL-forespørgsler. Dette kræver brug af Doktrinens oprindelige SQL funktion og kortlægning af resultaterne af forespørgslen ved hjælp af en ResultSetMapping .
Jeg stødte på et problem, da jeg udførte en Native SQL-forespørgsel to gange (med forskellige parametre), at den anden forespørgsels resultatsæt var det samme som det første.Følgende indlæg på GitHub løste dette for mig.
Løsning 2:Brug af MySQL's interne optimizer
Brug af følgende join-betingelse vil bruge MySQL's interne optimizer og behandle dette som en ref_or_null
join-type
SELECT a.*, b.*
FROM a
INNER JOIN b ON
a.column = b.column
OR (a.column IS NULL AND b.column IS NULL)
Det er så muligt at bruge denne join-betingelse i DQL, som vil blive oversat pænt til SQL for at blive optimeret.
Løsning 3:Skriv brugerdefineret DQL-funktion
Jeg skrev en brugerdefineret DQL-funktion, der er oversat til følgende klausul:
SELECT a.*, b.*
FROM a
INNER JOIN b ON (a.column <=> b.column) = 1
Desværre var det ikke i stand til at slippe af med = 1
del af denne klausul. Dette virkede, men forårsagede en større ydeevnepåvirkning på min forespørgsel:17s vs. 0,5s, for at give en (ikke-videnskabelig) indikation.
Så jeg gik ikke længere ad den vej.