1

对于我的公司,我正在开发一个需要从数据库中获取用户和企业的 Symfony 网络应用程序。但是我被迫使用 ODBC 连接。我选择了 pdo_odbc,这在控制器上运行良好(连接、查询、获取、渲染)。

但是如果我无法使用 Doctrine 进行连接,我对如何使用实体和存储库有点迷茫。

所以我现在正在做的是连接到数据库、进行查询、获取数据并在一个控制器功能中呈现给视图。如果不使用实体或存储库,这显然不是它应该的样子。

如果你们中的任何人需要更多信息,请随时发表评论。

PS:总的来说,我是 Symfony 的新手,所以非常感谢示例

4

1 回答 1

3

我们在一些项目上做同样的事情。

我们已经完成了以下步骤:

  • 编写存储库,但不使用 Doctrine ORM 和 QueryBuilder,我们只使用 PDO 连接和 PDO 语句。

  • 我们创建模型而不是实体。每个模型都有一个接收数据数组的“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();
于 2017-11-23T13:42:36.583 回答