Solução 1:Doctrine Native SQL
Uma maneira de conseguir isso é usando consultas nativas do MySQL. Isso requer o uso de SQL nativo do Doctrine recurso e mapear os resultados da consulta usando um Mapeamento do conjunto de resultados .
Eu me deparei com um problema ao executar uma consulta SQL nativa duas vezes (com parâmetros diferentes), que o conjunto de resultados da segunda consulta era o mesmo que o primeiro.Seguinte postagem no GitHub resolveu isso para mim.
Solução 2:usando o otimizador interno do MySQL
O uso da seguinte condição de junção usará o otimizador interno do MySQL e tratará isso como um
ref_or_null
tipo de junção SELECT a.*, b.*
FROM a
INNER JOIN b ON
a.column = b.column
OR (a.column IS NULL AND b.column IS NULL)
É então possível usar esta condição de junção em DQL, que será bem traduzida em SQL para ser otimizada.
Solução 3:escreva a função DQL personalizada
Eu escrevi uma função DQL personalizada que traduziu na seguinte cláusula:
SELECT a.*, b.*
FROM a
INNER JOIN b ON (a.column <=> b.column) = 1
Infelizmente não foi possível se livrar do
= 1
parte desta cláusula. Isso funcionou, mas causou um grande impacto de desempenho na minha consulta:17s vs 0.5s, para dar alguma indicação (não científica).Então eu não fui mais longe nesse caminho.