【发布时间】:2014-02-22 12:42:39
【问题描述】:
在编写 symfony2 应用程序的过程中,我需要为所有数据库交互编写自定义模型层,并且我想使用 Doctrine DBAL,而不是完整的 ORM。这是因为我没有设计数据库并且必须使用一组预定义的查询。
我知道我可以从控制器调用 DBAL 连接的服务,例如:
$results = $this->get('my_service')->someMethod();
将服务定义为:
src/Acme/BundleName/Resources/config/services.yml
services:
my_service:
class: Acme\BundleName\Entity\BaseEntity
arguments: [@database_connection]
src/Acme/BundleName/Entity/BaseEntity.php
namespace Acme\BundleName\Entity;
use Doctrine\DBAL\Connection;
class BaseEntity
{
private $connection;
public function __construct(Connection $dbalConnection) {
$this->connection = $dbalConnection;
}
public function someMethod(){
//method logic
}
}
现在,如何从我的自定义模型类中调用该服务,以便使用 dbal 连接来执行原始 slq?
我还了解到,我可以将每个类定义为将注入 dbal 连接的服务,但这会导致我有数十个已定义的服务(每个模型类一个)仅用于共享 dbal 连接。
理想情况下,我希望我的类使用自定义逻辑映射数据库表,就像许多其他框架一样。我也知道我可以在 Doctrine orm 中定义自定义“存储库”,但我只需要坚持使用 DBAL 层。
【问题讨论】:
-
您可以在 Symfony 中使用 DBAL 和 Doctrine 存储库,那么您的问题是什么?
-
如何从自定义类(我的模型类)获取 DBAL 连接?
-
你的意思是
custom class是一个服务? -
我实际上不知道它是否应该是一个服务,我正在寻找一种在我的自定义模型类中拥有 DBAL 连接的方法,我认为将它定义为一个服务很好方法,但我只能从 Controller 类中获取该服务(dbal 连接服务)。
-
但是您已经使用
arguments: [@database_connection]将 DBAL 注入到服务中。这是您需要的解决方案。所以在这个服务中使用$this->connection
标签: symfony doctrine-orm