我已经设置了一个具有多个实体管理器的新项目,当我尝试加载数据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