我有一些字段的表“my_table”。我想在 MyBundle 中使用“my_table”生成实体。但我不想重新创建 MyBundle 中的所有实体。我怎样才能做到这一点?
4 回答
这是你可以做到的方法,
第一步,让Doctrine自省数据库,生成对应的xml或yml元数据文件。
php app/console doctrine:mapping:convert [xml|yml] Path/To/MyBundle/Resources/config/doctrine/metadata/orm --from-database --force --filter=MyTable
第二步,让Doctrine通过执行以下两条命令导入schema并构建相关实体类。
php app/console doctrine:mapping:import MyBundle [xml|yml|annotation] --filter=MyTable
php app/console doctrine:generate:entities Path\To\MyBundle\EntityFolder\\MyTable
Symfony 2.7 选项注释和 [/xml/yml] 的简单工作解决方案参见http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
分 3 步执行 3 个命令:
命令#1:
$ php app/console doctrine:mapping:import --force AppBundle xml --filter="Meeting"
输出:
写 C:\xampp\htdocs\localxyz\src\AppBundle/Resources/config/doctrine/Meeting.orm.xml
命令#2:
$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
输出:
处理实体“会议”
将“注释”映射信息导出到“C:\xampp\htdocs\localxyz\src\Entity”
命令#3:
$ php app/console doctrine:generate:entities AppBundle:Meeting --no-backup
输出:
生成实体“AppBundle\Entity\Meeting”生成 AppBundle\Entity\Meeting
在哪里:
AppBundle 正是你在 2.7 symfony 中的“AppBundle” 会议是目标表(区分大小写)
可以肯定的是,检查这个目录:
C:\xampp\htdocs\myproj\src\AppBundle/Resources/config/doctrine/Meeting.orm.xml
C:\xampp\htdocs\myproj\src\AppBundle/Resources/config/doctrine/MeetingOriginal.orm.xml
并确保您只有要创建实体类文件的表的 .xml 文件,而没有其他文件。
它对我来说效果很好。
有关解释,请阅读:http ://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
php app/console doctrine:mapping:import "MyCustomBundle" xml --filter=MyMatchedEntity
虽然这是一个旧帖子,但如果有人收到以下错误,
Database does not have any mapping information.
查看
如果您的表名blog_post
在过滤器选项中使用BlogPost
而不是blog_post
参考:https ://stackoverflow.com/a/27019561/6504104
虽然上面的答案涵盖了这一点,但我错过了它并且收到了这个错误
所以我想明确这一点
同样在 symfony >= 3.4 中,php bin/console
例如
php bin/console doctrine:mapping:import --force AppBundle xml --filter="BlogPost"
接着
php bin/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="BlogPost"
谢谢...