2014-01-30 37 views
2

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

,我感到我可以叫一个服务从控制器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 
} 

}

现在,我怎么能叫从我的自定义模型类的服务,这样我就可以使用用于执行原SLQ的DBAL连接?

我还得到,我可以定义每个类作为服务,将有dbal连接注入,但这会导致我有几十个定义的服务(每个模型类一个)只用于共享dbal连接。

理想情况下,我希望我的类可以像许多其他框架一样使用自定义逻辑映射数据库表。我也知道我可以在Doctrine orm中定义自定义的“Repository”,但是我只需要坚持使用DBAL层。

+0

您可以使用和Symfony的DBAL和学说库与您的模型工作,所以你的问题是什么? –

+0

如何从自定义类(我的模型类)获取DBAL连接? – Carlo

+0

你的意思是'定制班'是一项服务吗? –

回答

0

所以,我认为你需要创建一个service,在其中注入主义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; 
} 
+0

这正是我所做的,我有一个注入了DBAL的服务。 我只是没有看到我可以如何与我的模型类 – Carlo

+0

检查更新。尝试使用类似于我的示例中的内容。但是如果你对它的实现没有任何想法,或者很难理解它是如何工作的,那么你最好还是需要首先使用Doctrine? –

+0

谢谢你的回答。我确实了解服务的工作原理。我不明白如何在没有为每个模型声明一个服务的情况下将我的模型类作为服务。如果你注意到,在你的解决方案中,有一个硬编码的类实例化,这正是我试图避免的,但在这一点上,我认为这是不可能的。 – Carlo