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

Add a new field from an object in a DQL query

实际上,我在 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)'
                );

看看我正在过滤出现在某些 Reserva.entrega 字段中的 entrega。 在 Entrega.

中有一个可选的 OneToOne 关系

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

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

类似于:

$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;

这个解决方案对我不起作用,因为 extra-select 使得结果变成了 Array 的矩形 ArrayArrayEntrega 对象。 我想要:

{{  entrega.myEntrega }} 

咨询后。

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

实现此目的的最简单方法是将 Reserva 实体加入 select。

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

然后您可以简单地运行以下查询:

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

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