如何在Doctrine 2中使用“DISTINCT ON(field)”?

时间:2012-08-03 08:06:47

标签: postgresql doctrine-orm

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

我的SQL查询如下:

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

此查询工作正常,但我不能将它与QueryBuilder一起使用。也许我可以用其他方式写这个查询?

2 个答案:

答案 0 :(得分:3)

我建议PostgreSQL支持的SELECT DISTINCT ON (..)构造超出了Doctrine的核心对象关系模型(ORM)。或者,或许换一种方式,因为SELECT DISTINCT ON (..)在SQL实现中很少见,Doctrine还没有编写代码。

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

  

使用NativeQuery,您可以执行本机SELECT SQL语句和映射   结果到Doctrine实体或支持的任何其他结果格式   由Doctrine撰写。

     

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

     

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

我认为

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

答案 1 :(得分:0)

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

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

希望得到这个帮助。