【问题标题】:Doctrine 2 Postgresql stored procedure mappingDoctrine 2 Postgresql 存储过程映射
【发布时间】:2013-06-10 09:20:04
【问题描述】:

我想将一个 postgresql 存储过程(它返回一个表作为结果)而不是一个表关联到一个学说实体。

例如:Get_Uuser(sexe, age) 过程在所有用户中搜索所选参数并返回 user_id 的集合(例如名称 user_id_rech)。

在 pgsql 中,我可以将此存储过程用作表:

select user_name 
from User 
left join  Get_User('H', 45)
where User.user_id = user_id_rech

存储过程在这里像一个表一样使用。

我认为原则 2 不允许映射存储过程,但我希望有人可以向我确认。

谢谢

【问题讨论】:

    标签: postgresql doctrine-orm


    【解决方案1】:

    (将其写为答案,因为它作为评论太长了。)

    无论 Doctrine 是否允许这样做,我都想主动说明您的查询效率会很低(也许非常糟糕),因为 Postgres 无法估计 Get_User() 将返回多少行。

    您的函数可能只是plpgsqlreturn query select ... 的包装器,或者如果以普通sql 编写,则相当于SQL。如果是这样,请考虑改为创建视图。这将允许 Postgres 在需要时重写查询,以及对表内容使用适当的统计信息,并且可能允许您完全摆脱连接。

    更好的是,直接发出查询。如果您经常使用它,请创建一个返回它的函数,以便进一步过滤。

    【讨论】:

    • 感谢您的回答。 Get_user 只是一个(非常)简单的示例,仅用于使我的问题更易于理解。我真正的功能实际上是一个动态查询构建器,它从多个表中返回数据。在这种情况下创建视图是不可能的。问候
    • 请注意,您可以告诉 PostgreSQL 一个查询通常返回多少行。请参阅CREATE FUNCTION 上的文档
    猜你喜欢
    • 2010-10-19
    • 2015-07-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多