对于我的公司,我正在开发一个需要从数据库中获取用户和业务的Symfony webapp。 但是我被迫使用ODBC连接。我使用了pdo_odbc,这在控制器上工作正常(连接,查询,提取,渲染)。
但如果我无法使用Doctrine进行连接,我对如何使用实体和存储库感到有点迷失。
所以我现在正在做的是连接到数据库,执行查询,获取数据并在一个控制器函数中呈现视图。如果不使用实体或存储库,这显然不是应该存在的。
如果你们中的任何人需要更多信息,请随时发表评论。
PS:我一般都是Symfony的新手,所以非常感谢
答案 0 :(得分:3)
我们在某些项目上做同样的事情。
我们已完成以下步骤:
编写存储库,但我们只使用PDO与PDO语句的连接,而不是使用Doctrine ORM和QueryBuilder。
我们创建模型而不是Entites。每个模型都有一个" setFromDb()"接收数据数组的函数。这些信息将与模型的属性相匹配。
在服务范围内,控制器无论我们只使用这些模型。
我们编写的存储库只是定义为服务的类,并将作为构造函数注入接收学说连接。然后,您可以获得连接并使用PDO。
存储库类的示例(请注意,我们只是将它们称为存储库,因为它们处理数据库查询,但它们与Symfony / Doctrine中的存储库类无关)
class DemoRepositoryClass
{
private $connection;
public function __construct(Registry $doctrine)
{
// Get the database connection from doctrine
$this->connection = $doctrine->getConnection();
}
public function test()
{
$query = "SELECT * FROM XXX WHERE FOO = 'BAZ";
$stmt = $this->conncetion->prepare($query);
// [...] Do as always with PDO;
}
}
此类将在services.yml
中定义为服务app.demo_repository_class:
class: AppBundle\Path\DemoRepositoryClass
arguments: ['@doctrine']
public: true
这样,您可以从控制器调用服务功能,例如:
// In a controller action/function
$this->get('app.demo_repository_class')->test();