我想从symfony应用程序的数据库生成实体类。 所以我按照以下三个步骤(来自How to generate Entities from an Existing Database)
1. php app/console doctrine:mapping:convert yml ./src/Acme/BlogBundle/Resources/config/doctrine/metadata/orm --from-database --force
2. php app/console doctrine:mapping:import AcmeBlogBundle yml
3. php app/console doctrine:generate:entities AcmeBlogBundle
为了解这三个命令的工作原理,我刚从 ./ src / Acme / BlogBundle / Resources / config / doctrine / metadata / orm 中删除了所有文件。我在一个表中添加了一个字段。之后我跟着命令-2和命令-3。
我检查了修改后的表的实体以获取新字段。新领域存在于实体中。
那么我们为什么要使用 doctrine:mapping:convert 命令从现有数据库生成实体?
答案 0 :(得分:6)
我不太明白你们在那里说的是什么,因为对我来说,3个命令是必需的,并且它们之间也有所不同。
如果要内省数据库模式以生成所需的symfony ORM文件和实体,则必须使用3个命令。
以下是他们的所作所为: 1)
php app/console doctrine:mapping:convert yml ./src/< vendor>/< bundle_name>/Resources/config/doctrine/metadata/orm --from-database --force
这通过内省构建来自DB的实体映射文件。对于DB上的每个表,这将仅生成&lt;实体&gt; .orm.yml in:
< proj_folder>/src/< vendor>/< bundle_name>/Resources/config/doctrine/metadata/orm/< entity>.orm.yml
2)
php app/console doctrine:mapping:import < vendor>< bundle_name> annotation**
为从DB中内省的每个表生成实体类:
输出:writing /var/www/html/< project_folder>/src/< vendor>/< bundle_name>/Entity/< entity>.php
3)
php app/console doctrine:generate:entities < vendor>< nameBundle>**
这只为所有实体类属性生成getter和setter。
答案 1 :(得分:4)
我所知道的,正如我在this post中解释的那样,映射:转换无法解析模型中关系的命名空间。这就是你需要处理映射的原因:导入并获取最终的映射文件。映射后:已处理导入,可以删除YourBundle/Resources/config/doctrine/metadata/orm
目录。
答案 2 :(得分:2)
生成实体类后,Doctrine足够智能,可以获取从Entity类导入映射所需的所有信息,而不需要在第一步中获取的类元数据。如果您已删除元数据和实体类,则无法在不运行步骤1的情况下运行步骤2。