5

我想为我的 symfony 应用程序从数据库中生成实体类。所以我遵循了以下三个步骤(来自如何从现有数据库生成实体

 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中删除了所有文件。我在一张表中添加了一个字段。之后,我遵循了 command-2 和 command-3。

我检查了新字段的修改表的实体。新字段存在于实体中。

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

4

3 回答 3

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

这会通过自省从数据库中构建实体映射文件。对于数据库上的每个表,这只会在以下位置生成一个 <entity>.orm.yml:

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

于 2012-10-07T22:54:35.803 回答
4

据我所知,正如我在这篇文章中解释的那样,mapping:convert 无法解析模型中关系的命名空间。这就是为什么您需要处理映射:导入并获取最终映射文件。处理完mapping:import后,就可以删除YourBundle/Resources/config/doctrine/metadata/orm目录了。

于 2012-08-07T12:50:40.093 回答
2

一旦您生成了实体类,Doctrine 就足够智能,可以获取从实体类导入映射所需的所有信息,而不需要您在第一步中获得的类元数据。如果您删除了元数据和实体类,那么您将无法在不运行步骤 1 的情况下运行步骤 2。

于 2012-08-07T07:27:10.030 回答