从DQL查询中的对象添加新字段

时间:2015-07-29 12:40:14

标签: symfony doctrine-orm dql

实际上我在Symfony2 / twig / Doctrine项目中使用DQL(Doctrine)中的类似内容:

$query = $em->createQuery('
                SELECT e, l
                FROM FrontendBundle:Entrega e
                JOIN e.libro l
                WHERE EXISTS (SELECT r1.id FROM FrontendBundle:Reserva r1
                                WHERE r1.entrega = e.id)'
                );

看看我正在过滤某些entrega字段中显示的Reserva.entregaEntrega中有一个可选的 OneToOne 关系。

SELECT e, l它对我有用,因为我在树枝中使用这样的代码:{{ entrega.libro.id }} ......

问题是,是否存在选择所有Entrega的另一种方法,但在每个方法中包含一个包含关联的Reserva对象的新字段,或者为null。

类似的东西:

$query = $em->createQuery('
                SELECT e, l        
             **(SELECT r1.id FROM FrontendBundle:Reserva r1
                        WHERE r1.entrega = e.id) as myReserva**

                FROM FrontendBundle:Entrega e
                JOIN e.libro l;

此解决方案对我不起作用,因为额外选择使得结果变为矩形Array,no和Array Entrega个对象。 我想:

{{  entrega.myEntrega }} 
咨询后。

我知道这种情况需要ManyToMany关系。但是我的项目接下来就完成了,这是一个新功能。我希望通过一些更改重用我的所有树枝视图和逻辑。

1 个答案:

答案 0 :(得分:1)

您可以实现此目的的最简单方法是将Reserva实体加入选择。

为此,您必须在Entrega实体中映射关联,例如:reserva

然后您只需运行以下查询:

$query = $em->createQuery('
            SELECT e, l, r
            FROM FrontendBundle:Entrega e
            JOIN e.libro l
            LEFT JOIN e.reserva r'
            );

只有Reserva中存在关系的Entrega个实体才会添加到结果集中。