Symfony3.4在一个应用程序中使用两个数据库

时间:2018-03-02 16:56:10

标签: database entitymanager symfony-3.4

我尝试使用symfony 3.4构建一个访问两个不同数据库的应用程序。

https://symfony.com/doc/3.4/doctrine/multiple_entity_managers.html

在本文档中,我看到我必须像这样配置我的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

        employeedb:
            driver:   pdo_mysql
            host:     '%database_host%'
            port:     '%database_port%'
            dbname:   '%database_name2%'
            user:     '%database_user%'
            password: '%database_password%'
            charset:  UTF8

  orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    default_entity_manager: default
    entity_managers:
        default:
            connection: default
            mappings:
                AppBundle:  ~
        employeedb:
            connection: employeedb
            mappings:
                EmployeeBundle:  ~

我为EmployeeBundle生成一个seccond包。 现在,如果我尝试使用简单查询从第二个数据库获取值,它可以正常工作:

$em = $this->getDoctrine()->getManager('employeedb'); <br/>
$RAW_QUERY = "SELECT * FROM employee";

如果我尝试使用这样的学说,我会收到错误(ORMException):

$employees = $this->getDoctrine()
                  ->getRepository('EmployeeBundle:Employee')
                  ->findAll();

未知实体名称空间别名'EmployeeBundle'。

我的配置有什么问题?我应该在entity_manager employeedb中添加一些内容吗?

1 个答案:

答案 0 :(得分:0)

解决方案是在doctrine命令中提供新entitymanager的名称:

     $results = $this->getDoctrine()
                    ->getManager('employeedb')
                    ->getRepository('EmployeeBundle:Employee')
                    ->findAll();