从 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
的矩形 Array
和 Array
的 Entrega
对象。
我想要:
{{ 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
中存在关系的实体将被添加到结果集中。
实际上,我在 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
.
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
的矩形 Array
和 Array
的 Entrega
对象。
我想要:
{{ 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
中存在关系的实体将被添加到结果集中。