如何使用Symfony2创建第二个数据库连接?

时间:2016-07-05 15:47:16

标签: symfony doctrine-orm

我试图将第二个数据库连接到Symfony2中的项目。首先,我在parameters.yml中添加了一些参数来创建连接。

然后,我编辑了我的config.yml,现在看起来像:

doctrine:
    dbal:
        default_connection:   default
        connections:
            default:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
            circutor3:
                driver:   pdo_sqlsrv
                host:     "%database_host_circutor3%"
                port:     "%database_port_circutor%"
                dbname:   "%database_name_circutor%"
                user:     "%database_user_circutor3%"
                password: "%database_password_circutor3%"
                charset:  UTF8
orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true

最后,我尝试使用控制器中的以下代码进行连接:

$em = $this->getDoctrine()->getManager('circutor3');

并且,Symfony2返回错误:

  

Doctrine ORM经理名为" circutor3"不存在。

circutor3连接到我系统外部的数据库,因此我不需要创建实体或对象。我只需要执行一些SELECT来获取信息并使用数组存储它。

创建典型的mysqli连接是解决问题的最佳方法吗? 我不知道如何用Symfony来解决这个问题。 提前谢谢。

2 个答案:

答案 0 :(得分:4)

您可以访问控制器中的数据库连接,如下所示:

    $connection = $this->getDoctrine()->getConnection('circutor3');

然后使用连接:

$stmt = $connection->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();

一些帮助herehere

希望这个帮助

答案 1 :(得分:2)

根据Symfony文档(http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html),您只定义了一个连接,而不是实体管理器:

您必须为每个连接创建一个entity_manager。

orm:
    default_entity_manager: default
    entity_managers:
        default:
            ...
        circutor3:
            connection: circutor3
            mappings:
                AppBundle: ~