php - 在 Symfony2 中使用同一包中的两个实体管理器

标签 php doctrine symfony entity bundle

我正在尝试与同一个 bundle 的两个实体管理器合作。我的配置是这样的:

orm:

    default_entity_manager:   default
    entity_managers:
        electra:
            connection:       electra
            mappings:
                XXDemoBundle: ~
        default:
            connection:       default
            mappings:
                XXDemoBundle: ~

有什么方法可以告诉哪些实体属于哪个实体管理器?如果我想使用不属于默认实体管理器的表,它现在会崩溃。

  • 更新

这是我的连接配置:

doctrine:
    dbal:
        default_connection:       default
        connections:
            default:
                dbname:           old_project
                user:             root
                password:         123123
                host:             1.1.1.1
                port:             1
            electra:
                dbname:           electra
                user:             root
                password:         123123
                host:             2.2.2.2
                port:             2

orm:
    default_entity_manager:   electra
    entity_managers:
        electra:
            connection:       electra
            mappings:
                XXDemoBundle: ~


        default:
            connection:       default
            mappings:
                XXDemoBundle: ~

最佳答案

要在同一包中使用多个实体管理器,您必须为每个实体管理器配置映射选项。

http://symfony.com/doc/current/reference/configuration/doctrine.html

配置文件示例

doctrine:
    dbal:
        default_connection:   default
        connections:
            default:
                driver:   %database_driver%
                host:     %database_host%
                port:     %database_port%
                dbname:   %database_name%
                user:     %database_user%
                password: %database_password%
                charset:  UTF8
            second:
                driver:   %database_sqlite_driver%
                host:     ~
                port:     ~
                dbname:   %database_sqlite_shop_name%
                path:     %database_sqlite_shop_name%
                user:     ~
                password: ~
                charset:  UTF8

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        default_entity_manager:   default
        entity_managers:
            default:
                connection:       default
                mappings:
                    YourBundle:
                      # you must specify the type
                      type:     "annotation"    
                      # The directory for entity (relative to bundle path)
                      dir:      "Entity/FirstDb"        
                      #the prefix 
                      prefix:   "Your\Bundle\Entity\FirstDb" 
            shop:
                connection:       second
                mappings:
                    YourBundle:
                      type: "annotation"
                      #here the second path where entity for the connection stand
                      dir: "Entity/SecondDb" 
                      #the prefix
                      prefix: "Your\Bundle\Entity\SecondDb" 

You can now use console for managing your db with the --em parameter

Ex : update database for shop entitymanager

php app/console doctrine:schema:update --em=shop

从 Your\Bundle\Entity\SecondDb 读取映射信息

例如:更新默认实体管理器的数据库

php app/console doctrine:schema:update   

从 Your\Bundle\Entity\FirstDb 读取映射信息

关于php - 在 Symfony2 中使用同一包中的两个实体管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9311485/

相关文章:

Laravel 迁移创建用户 "unexpected ' use' (T_USE)"SQLite

php - Twig+ Wordpress - 如何将数组参数传递给函数?

php - 无法在 php mysql 中使用 union

symfony - 类表继承中的级联删除不会删除父行

php - 有关条令验证的自定义错误消息

php - 与简单的 PDO 相比,Doctrine 的数据库抽象层提供了什么?

php - Laravel 获取关系项的集合

php - 将表从一个mysql复制到另一个mysql

php - Yii 用户身份验证和 session 不起作用

linux - 使用控制台的 Symfony 缓存权限