实际上我在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.entrega
。
Entrega
中有一个可选的 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
关系。但是我的项目接下来就完成了,这是一个新功能。我希望通过一些更改重用我的所有树枝视图和逻辑。
答案 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
个实体才会添加到结果集中。