重用doctrine实体管理器使用的数据库连接

时间:2014-11-09 06:58:39

标签: php mysql doctrine-orm

Doctrine在其Connection类中封装了特定于驱动程序的本机数据库连接资源句柄。我正在谈论从mysqli_connect()返回的资源。我没有看到任何方法来访问原始连接资源 - 我没有能够找到的getter方法。这种强有力的封装应该是一个暗示我不应该尝试访问它并使用它,但当然,这正是我想要做的。

如果我要从同一个连接发出只读选择查询会不会引起任何问题?我不确定教条的工作流程是如何运作的。数据库连接是有状态的,我有点害怕我可能会在doctrine部分正在进行多步事务的时刻跳进并发出sql查询,这显然会导致问题。但是凭借php的单线程特性,我认为这在实践中可能是不可能的,这取决于教条的工作原理。

旁白:我想这样做的原因是为了表现。我有一些其他代码没有用doctrine编写,它需要原始数据库连接,因为它使用本机db扩展函数。我可以打开另一个数据库连接,但是在我的场景中打开第二个连接会产生重大的性能影响...这使得尝试重用doctrines连接非常有吸引力。

1 个答案:

答案 0 :(得分:2)

尝试getWrappedConnection它会返回Doctrine\DBAL\Driver\PDOConnection的实例,\PDO$connection = $this->getEntityManager() ->getConnection() ->getWrappedConnection(); $stmt = $connection->prepare('SELECT * FROM `City`'); $stmt->execute(); 的包装器:

{{1}}

P.S。我认为重用现有连接而不是创建新连接是完全正常的。我在一个有Doctrine1和Doctrine2的项目中这样做。