如何与多个实体管理器和连接工作
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.4,现已不再维护。
读本页的更新版本用于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:默认的连接:默认值:司机:“% database_driver %”主持人:“% database_host %”端口:“% database_port %”dbname:“% database_name %”用户:“% database_user %”密码:“% database_password %”字符集:use UTF8顾客:司机:“% database_driver2%”主持人:“% database_host2%”端口:“% database_port2%”dbname:“% database_name2%”用户:“% database_user2%”密码:“% database_password2%”字符集:use UTF8orm:default_entity_manager:默认的entity_managers:默认值:连接:默认的映射:AcmeDemoBundle:~AcmeStoreBundle:~顾客:连接:客户映射:AcmeCustomerBundle:~
在本例中,您定义了两个实体管理器并调用了它们默认的
而且客户
.的默认的
实体管理器管理AcmeDemoBundle
而且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"实体管理器$新兴市场=$这->get (“原则”)->getManager ();$新兴市场=$这->get (“原则”)->getManager (“默认”);$新兴市场=$这->get (“doctrine.orm.default_entity_manager”);//两者都返回"customer"实体管理器$customerEm=$这->get (“原则”)->getManager (“客户”);$customerEm=$这->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
类用户控件扩展控制器{公共函数indexAction(){//检索由"default" em管理的存储库$产品=$这->get (“原则”)->getRepository (“AcmeStoreBundle:产品”)->findAll ();//处理“默认”em的显式方法$产品=$这->get (“原则”)->getRepository (“AcmeStoreBundle:产品”,“默认”)->findAll ();//检索由"customer" em管理的存储库$客户=$这->get (“原则”)->getRepository (“AcmeCustomerBundle:客户”,“客户”)->findAll ();}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。