11

我知道如何在 Doctrine 2 中使用“DISTINCT”,但我确实需要使用“DISTINCT ON (field)”,而且我不知道如何使用 QueryBuilder 执行此操作。

我的 SQL 查询如下所示:

SELECT DISTINCT ON (currency) currency, amount FROM payments ORDER BY currency

而且这个查询很完美,但我不能将它与 QueryBuilder 一起使用。也许我可以用其他方式写这个查询?

4

2 回答 2

3

我建议SELECT DISTINCT ON (..)PostgreSQL 支持的结构在 Doctrine 核心的对象关系模型 (ORM) 之外。或者,也许换一种说法,因为SELECT DISTINCT ON (..)在 SQL 实现中很少见 Doctrine 没有为它编码。

不管它不起作用的实际逻辑如何,我建议您尝试 Doctrine 的“ Native SQL ”。您需要将查询结果映射到 ORM。

您可以执行本机 SELECT SQL 语句并将结果映射到NativeQueryDoctrine 实体或 Doctrine 支持的任何其他结果格式。

为了使这种映射成为可能,您需要向 Doctrine 描述结果中的哪些列映射到哪个实体属性。该描述由一个ResultSetMapping对象表示。

使用此功能,您可以将任意 SQL 代码映射到对象,例如高度供应商优化的 SQL 或存储过程。

SELECT DISTINCT ON (..)我认为属于供应商优化的 SQL,因此使用NativeQuery应该允许您访问它。

于 2016-02-17T21:02:30.047 回答
0

Doctrine QueryBuilder 有一些限制。即使我没有检查是否可以使用查询生成器,当我不知道如何使用查询生成器编写查询时,我也会毫不犹豫地使用 DQL。

在http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#dql-select-examples查看这些示例

希望这有帮助。

于 2015-04-28T11:57:52.447 回答