Pregunta

Tengo la siguiente consulta SQL:

select bank.*
from bank
join branch on branch.bank_id = bank.id
join account a on a.branch_id = branch.id
join import i on a.import_id = i.id

Devuelve exactamente lo que espero.

Ahora considere las siguientes dos consultas DQL:

      $q = Doctrine_Query::create()
        ->select('Bank.*')
        ->from('Bank')
        ->leftJoin('Branch')
        ->leftJoin('Account')
        ->leftJoin('Import');

-

      $q = Doctrine_Query::create()
        ->select('Bank.*')
        ->from('Bank')
        ->innerJoin('Branch')
        ->innerJoin('Account')
        ->innerJoin('Import');

Hubiera sido agradable haber sido capaz de utilizar un "join ()" método, pero, a partir de la doctrina oficial de unirse a la documentación aquí, se dice, "DQL es compatible con dos tipos de combinaciones combinaciones internas y LEFT JOIN". Por alguna razón que se me escapa a fondo, han optado por no apoyar une natural. De todos modos, lo que esto significa es que las dos consultas anteriores son mis únicas opciones. Bueno, eso es desafortunado porque ninguno de los dos trabajos .

La primera consulta - el de la izquierda se une a -. No funciona porque, por supuesto, a la izquierda se unen y se unen a un natural son dos cosas diferentes

La segunda consulta no funciona, tampoco. Incomprensiblemente, me sale un error: "alias relación Desconocido"

¿Por qué debería Doctrina ser capaz de averiguar el alias de un LEFT JOIN pero no para un INNER JOIN?

Por cierto, realizo INNER JOIN y unirse sólo son nominalmente diferentes, pero ¿Por qué implementar el más específico y no canónica, naturales uno?

¿Fue útil?

Solución

    ->select('b.*')
    ->from('Bank b')
    ->leftJoin('b.Branch h')

    ->select('b.*')
    ->from('Bank b')
    ->innerJoin('b.Branch h')

http: // www.doctrine-project.org/documentation/manual/1_1/en/dql-doctrine-query-language:join-syntax

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top