symfony2 - DBAL自定义“模型”图层

时间:2014-01-30 09:38:24

标签: symfony doctrine-orm

在编写symfony2应用程序的过程中,我需要为所有数据库交互编写自定义模型层,我想使用Doctrine DBAL,而不是完整的ORM。这是因为我没有设计数据库,必须使用一组预定义的查询。

我知道我可以从控制器调用DBAL连接的服务,例如:

$results = $this->get('my_service')->someMethod();

将服务定义为:

的src / Acme公司/ BUNDLENAME /资源/配置/ services.yml

services:
  my_service:
  class:  Acme\BundleName\Entity\BaseEntity
  arguments:  [@database_connection]

的src / Acme公司/ BUNDLENAME /实体/ 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中定义自定义“Repository”,但我只需要坚持使用DBAL层。

1 个答案:

答案 0 :(得分:0)

所以,我认为你需要创建一个service,在其中注入Doctrine DBAL依赖关系,并通过此服务加载和使用你的模型

public function someMethod(){
   //load the model
   $model = new MyModel();
   // Then get data from DB and fetch them to model

   //other method logic
   return $model;
}