在编写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层。
答案 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;
}