【发布时间】:2020-07-10 11:16:46
【问题描述】:
看了很多地方,连Doctrine的官方文档都不再能通过Doctrine在Symfony中调用数据库(我这里是PostgreSQL)的存储过程和函数了。
例如,假设我想在 PosgresSQL 中执行一个简单的 greeting() 函数,该函数总是返回一个 "Hello" 并且我想从 Symfony 执行等效的操作“SELECT id, username, greeting () FROM user”。我打算在屏幕上以 3 列的列表显示此查询的结果。编辑某些行时,将第一行和第二行保留在数据库中。第三个,因为它是一个计算列。
显然,在现实世界中,函数会稍微复杂一些。我只是想了解如何处理对存储在数据库中的函数和过程的调用。由于我开始的项目将不得不使用复杂而密集的基础计算。
正如我所说,在咨询后我想知道解决方案是否是使用Native SQL and ResultSetMapping from Doctrine。这是唯一接近解决我的问题的事情。我认为它有点复杂,我认为必须有一些更简单的方法来解决它。来吧,我想相信这很普遍,一定有更简单的解决方案。
有人可以指导我吗?
我为我的英语道歉。我用过谷歌翻译服务。我的母语是西班牙语。
【问题讨论】:
-
有一个扩展beberlei/doctrineextensions 将内置函数添加到教义(用于 sql/dql 解析器)。您可以以相同的方式添加您的存储功能。或者(在这个特定的用例中可能更容易),您可以只使用pdo connection via
$em->getConnection(),然后只需执行您的 sql 查询,而无需任何学说验证。 (另见:php.net/pdo) -
附录:如果你想水合实体对象,你只需要原生查询 + 结果集映射,我假设你不需要。在没有任何实体的情况下使用连接可能更适合......但是你失去了与学说/symfony 的集成(查询可能不会出现在探查器中)
标签: postgresql symfony doctrine-orm doctrine