我如何使用Symfony原则:fixture:load与多个实体管理器


How do I use Symfony doctrine:fixtures:load with multiple entity managers?

我已经设置了一个具有多个实体管理器的新项目,当我尝试加载数据fixture时,我得到一个MappingException,因为控制台试图加载fixture,而不是我指定的实体管理器。

这是我的config.yml

中的doctrine部分
doctrine:
    dbal:
        connections:
            default:
                driver:   %database_driver%
                host:     %database_host%
                port:     %database_port%
                dbname:   %database_name%
                user:     %database_user%
                password: %database_password%
                charset:  %database_charset%
            symblog:
                driver:   %database_driver_blog%
                host:     %database_host_blog%
                port:     %database_port_blog%
                dbname:   %database_name_blog%
                user:     %database_user_blog%
                password: %database_password_blog%
                charset:  %database_charset_blog%
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        entity_managers:
            default:
                connection: default
                mappings:
                    IncompassAuthBundle: ~
                    IncompassUserBundle: ~
                    IncompassApiBundle: ~
                    IncompassSurgeryBundle:  ~
                    IncompassVendorBundle:  ~
                    IncompassHospitalBundle:  ~
                dql:
                    datetime_functions:
                        date: Mapado'MysqlDoctrineFunctions'DQL'MysqlDate
            symblog:
                connection: symblog
                mappings:
                    IncompassBlogBundle: ~
                dql:
                    datetime_functions:
                        date: Mapado'MysqlDoctrineFunctions'DQL'MysqlDate

正如你所看到的,我已经为symblog教程设置了一个单独的连接和实体管理器。

当我尝试

php app/console doctrine:fixtures:load --em=default

我得到这个

Careful, database will be purged. Do you want to continue Y/N ?Y
  > purging database
  > loading [1] Incompass'BlogBundle'DataFixtures'ORM'BlogFixtures
  [Doctrine'Common'Persistence'Mapping'MappingException]                                                                                                              
  The class 'Incompass'BlogBundle'Entity'Blog' was not found in the chain configured namespaces Incompass'AuthBundle'Entity, Incompass'UserBundle'Entity, Incompass'  
  SurgeryBundle'Entity, Incompass'VendorBundle'Entity, Incompass'HospitalBundle'Entity, FOS'UserBundle'Model                                                          
doctrine:fixtures:load [--fixtures[="..."]] [--append] [--em="..."] [--purge-with-truncate]

当我尝试

php app/console doctrine:fixtures:load --em=symblog

Careful, database will be purged. Do you want to continue Y/N ?Y
  > purging database
  > loading [1] Incompass'BlogBundle'DataFixtures'ORM'BlogFixtures
  > loading [1] Incompass'SurgeryBundle'DataFixtures'ORM'SurgeryStatusFixtures
  [Doctrine'Common'Persistence'Mapping'MappingException]                                                                                 
  The class 'Incompass'SurgeryBundle'Entity'SurgeryStatus' was not found in the chain configured namespaces Incompass'BlogBundle'Entity  
doctrine:fixtures:load [--fixtures[="..."]] [--append] [--em="..."] [--purge-with-truncate]

因此控制台命令似乎忽略了"——em=foobar"选项,并试图加载它找到的所有数据fixture。

我怎么能得到doctrine:fixtures:load只使用指定的实体管理器?

在phil的评论之后,我将所有的fixture移动到FixturesBundle中并这样做

php app/console doctrine:fixtures:load --fixtures=src/Incompass/FixturesBundle/DataFixtures/ORM

对于Blog fixture,我还必须指定实体管理器

php app/console doctrine:fixtures:load --fixtures=src/Incompass/BlogBundle/DataFixtures/ORM --em=symblog