代码之家  ›  专栏  ›  技术社区  ›  Kees Sonnema

将Symfony2与PDO_odbc一起使用,并使用服务和存储库进行连接和查询

  •  1
  • Kees Sonnema  · 技术社区  · 7 年前

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

    但如果我无法使用条令进行连接,我就有点迷失了如何使用实体和存储库。

    所以我现在要做的是在一个控制器函数中连接到数据库,进行查询,获取数据并渲染到视图。如果不使用实体或存储库,这显然不是它应该做的。

    如果你们需要更多信息,请随时发表评论。

    PS:一般来说,我对Symfony是新手,所以非常感谢您的示例

    1 回复  |  直到 7 年前
        1
  •  3
  •   KhorneHoly    7 年前

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

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

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

    • 我们创建模型而不是实体。每个模型都有一个“setFromDb()”函数,用于接收数据数组。这些信息将与模型的属性相匹配。

    • 在服务中,我们只处理模型。

    我们刚刚编写的存储库是定义为服务的类,将作为构造函数注入接收条令连接。然后您可以获得连接并使用PDO。

    存储库类示例(请注意,我们之所以称其为存储库,是因为它们处理数据库查询,但与Symfony/doctor中的存储库类无关)

    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;
        }
    
    }
    

    此类将在服务中定义为服务。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();