在编写Symfony2应用程序的过程中,我需要为所有数据库交互编写自定义模型层,我想使用Doctrine dbal,而不是完整的ORM。这是因为我没有设计数据库,因此必须使用一组预定义的查询。
我知道我可以从控制器中调用DBAL连接的服务,例如:
$results = $this->get('my_service')->someMethod();
将服务定义为:
src/acme/bundlename/resources/config/services.yml
services:
my_service:
class: AcmeBundleNameEntityBaseEntity
arguments: [@database_connection]
src/acme/bundlename/entity/baseentity.php
namespace AcmeBundleNameEntity;
use DoctrineDBALConnection;
class BaseEntity
{
private $connection;
public function __construct(Connection $dbalConnection) {
$this->connection = $dbalConnection;
}
public function someMethod(){
//method logic
}
}
现在,如何从自定义模型类调用该服务,以便我可以使用DBAL连接来执行RAW SLQ?
我还知道,我可以将每个类都定义为将注入DBAL连接的服务,但这将使我仅用于共享DBAL连接的数十个定义服务(每个模型类)。p>理想情况下,我想像许多其他框架一样,让我的课程用自定义逻辑映射数据库表。我也知道我可以在学说ORM中定义自定义"存储库",但是我只需坚持使用dbal层。
所以,我认为您需要创建一个 service
,在IT中注入 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;
}