如何处理多个实体管理器和连接

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.4,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

如何处理多个实体管理器和连接

您可以使用多个教义的实体管理器或连接在Symfony应用程序。欧宝娱乐app下载地址这是必要的,如果您使用的是不同的数据库,甚至供应商与完全不同的实体。换句话说,一个连接到一个数据库的实体管理器将处理一些实体,而另一个实体管理器,连接到另一个数据库可能会处理剩下的。

请注意

使用多个实体管理器非常简单,但更先进,通常不是必需的。确保你真正需要的多个实体管理器添加在这一层的复杂性。

谨慎

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

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

  • YAML
  • XML
  • PHP
1 2 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 bin /控制台学说:数据库:创建#玩只与“客户”连接美元php bin /控制台学说:数据库:创建——连接=客户

在处理多个实体管理器更新模式:

1 2 3 4 5
#玩只有“默认”映射美元php bin /控制台学说:模式:更新——力量#玩只与“客户”的映射美元php bin /控制台学说:模式:更新-力- em =客户

如果你省略实体管理器的名字当要求时,默认的实体管理器(即。默认的返回:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ /……用户控件扩展控制器{公共函数indexAction(){/ / 3返回“默认”实体管理器美元entityManager=美元- >getDoctrine ()- >getManager ();美元entityManager=美元- >getDoctrine ()- >getManager (“默认”);美元entityManager=美元- >get (“doctrine.orm.default_entity_manager”);/ /这两个返回“客户”的实体管理器美元customerEntityManager=美元- >getDoctrine ()- >getManager (“客户”);美元customerEntityManager=美元- >get (“doctrine.orm.customer_entity_manager”);}}

现在可以使用学说就像你之前做的——使用默认的实体管理器保存和获取它管理实体客户实体管理器持续并获取其实体。

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

1 2 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
使用AcmeStoreBundle\实体\客户;使用AcmeStoreBundle\实体\产品;/ /……用户控件扩展控制器{公共函数indexAction(){/ /获取存储库管理的“默认”美元产品=美元- >getDoctrine ()- >getRepository(产品::类)- >findAll ();/ /显式方法处理“默认”美元产品=美元- >getDoctrine ()- >getRepository(产品::类,“默认”)- >findAll ();/ /获取存储库管理的“客户”美元客户=美元- >getDoctrine ()- >getRepository(客户::类,“客户”)- >findAll ();}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。