我知道如何在Doctrine 2中使用“DISTINCT”,但我真的需要使用“DISTINCT ON(field)”,我不知道如何使用QueryBuilder执行此操作。
我的SQL查询如下:
SELECT DISTINCT ON (currency) currency, amount FROM payments ORDER BY currency
此查询工作正常,但我不能将它与QueryBuilder一起使用。也许我可以用其他方式写这个查询?
答案 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。
希望得到这个帮助。