doctrine:mapping:convert和doctrine:mapping:import之间的区别

时间:2012-06-29 06:35:21

标签: symfony doctrine

我想从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 / BlogBu​​ndle / Resources / config / doctrine / metadata / orm 中删除了所有文件。我在一个表中添加了一个字段。之后我跟着命令-2和命令-3。

我检查了修改后的表的实体以获取新字段。新领域存在于实体中。

那么我们为什么要使用 doctrine:mapping:convert 命令从现有数据库生成实体?

3 个答案:

答案 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。