如何与多个实体管理器和连接工作

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.7,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何与多个实体管理器和连接工作

您可以在Symfony应用程序中使用多个Doctrine实体管理器或连接。ob娱乐下载如果您使用不同的数据库,甚至使用完全不同的实体集的供应商,这是必要的。换句话说,连接到一个数据库的一个实体管理器将处理一些实体,而连接到另一个数据库的另一个实体管理器可能处理其余的实体。

请注意

使用多个实体管理器非常简单,但更高级,通常不需要。在添加这个复杂层之前,请确保您确实需要多个实体管理器。

谨慎

实体不能跨不同的实体管理器定义关联。如果你需要,这里有几个选择这需要一些自定义设置。

下面的配置代码展示了如何配置两个实体管理器:

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
原则:dbal:default_connection:默认的连接:默认值:司机:pdo_mysql主持人:“% database_host %”端口:“% database_port %”dbname:“% database_name %”用户:“% database_user %”密码:“% database_password %”字符集:use UTF8顾客:司机:pdo_mysql主持人:“% database_host2%”端口:“% database_port2%”dbname:“% database_name2%”用户:“% database_user2%”密码:“% database_password2%”字符集:use UTF8orm:default_entity_manager:默认的entity_managers:默认值:连接:默认的映射:AppBundle:AcmeStoreBundle:顾客:连接:客户映射:AcmeCustomerBundle:

在本例中,您定义了两个实体管理器并调用了它们默认的而且客户.的默认的实体管理器管理AppBundle和AcmeStoreBundle中的实体,而客户实体管理器管理AcmeCustomerBundle中的实体。您还定义了两个连接,每个连接对应一个实体管理器。

请注意

当使用多个连接和实体管理器时,您应该明确需要哪种配置。如果你忽略连接或实体管理器的名称,默认的(即。默认的)。

当使用多个连接创建数据库时:

1 2 3 4 5
只在“默认”连接下播放PHP应用程序/控制台原则:数据库:创建#只与“客户”连接PHP应用程序/控制台原则:数据库:create——connection=customer

当使用多个实体管理器更新你的模式时:

1 2 3 4 5
#只播放“默认”映射PHP应用程序/控制台原则:schema:update——force#只播放“客户”映射PHP应用程序/控制台原则:schema:update——force——em=customer

如果你在请求时省略实体管理器的名称,默认的实体管理器(即。默认的)返回:

12 3 4 5 6 7 8 9 10 11 12 13 14
用户控件扩展控制器公共函数indexAction()//这三个都返回"default"实体管理器entityManager->get (“原则”->getManager ();entityManager->get (“原则”->getManager (“默认”);entityManager->get (“doctrine.orm.default_entity_manager”);//两者都返回"customer"实体管理器customerEntityManager->get (“原则”->getManager (“客户”);customerEntityManager->get (“doctrine.orm.customer_entity_manager”);}}

您现在可以像以前一样使用Doctrine -使用默认的实体管理器来持久化和获取它所管理的实体客户实体管理器来持久化和获取它的实体。

这同样适用于存储库调用:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
使用AcmeStoreBundle实体客户使用AcmeStoreBundle实体产品用户控件扩展控制器公共函数indexAction()//检索由"default" em管理的存储库产品->get (“原则”->getRepository(产品::类)->findAll ();//处理“默认”em的显式方法产品->get (“原则”->getRepository(产品::类,“默认”->findAll ();//检索由"customer" em管理的存储库客户->get (“原则”->getRepository(客户::类,“客户”->findAll ();}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。