Doctrine2 LEFT JOIN WITH产生意想不到的结果

时间:2015-03-15 14:22:41

标签: php mysql sql symfony doctrine-orm

我有以下查询:

<?php
$em = $this->getDoctrine()->getManager();

$data['ps'] = $em->createQuery('SELECT s,ps FROM AppBundle:Sucursales s LEFT JOIN AppBundle:ComprasProductosSucursales ps WITH s.id = ps.sucursal')->getResult();

但是我得到的结果如下图所示:

![Doctrine2结果集的示例] [1]

我希望$data['ps'][1]成为$data['ps'][0]的一部分,否则数组的迭代会非常奇怪。

那么,有可能将连接表AppBundle的结果:ComprasProductosSucursales作为AppBundle:Sucursales数据的列?

的ORM:

AppBundle\Entity\Sucursales:
    type: entity
    table: sucursales
# Note: no relations defined, deleting the rest of the columns for clarity

AppBundle\Entity\ComprasProductosSucursales:
    type: entity
    table: compras_productos_sucursales

manyToOne:
    producto:
        targetEntity: ComprasProductos
    sucursal:
        targetEntity: Sucursales
        cascade: {  }

1 个答案:

答案 0 :(得分:1)

假设您的实体相关,那么通常您的DQL查询将类似于:

  $dql <<<EOT
SELECT s,ps FROM AppBundle:Sucursales s 
LEFT JOIN s.ps ps
EOT;

Doctrine负责连接上的with条件,并为您提供嵌套的结果集。假设您的Sucursales有一个名为ps的集合属性。我想我也假设你正在创建Doctrine 2实体并让它们相关。

更多信息:http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#joins