【问题标题】:Difference between doctrine:mapping:convert and doctrine:mapping:import学说:映射:转换和学说:​​映射:导入之间的区别
【发布时间】:2012-06-29 06:35:20
【问题描述】:

我想从数据库中为我的 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 中删除了所有文件。我在一张表中添加了一个字段。之后我跟着 command-2 和 command-3。

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

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

【问题讨论】:

  • 感觉Symfony社区支持不好。
  • 我没有得到很好的解释。为了丢分,我把积分给他们试图澄清我的人。

标签: symfony doctrine


【解决方案1】:

我不太明白你们在说什么,因为对我来说这 3 个命令是必需的,而且它们之间是不同的。

如果你想自省一个 DB 模式来生成所需的 symfony ORM 文件和实体,那么你必须使用 3 个命令。

这是他们的工作: 1)

php app/console doctrine:mapping:convert yml ./src/< vendor>/< bundle_name>/Resources/config/doctrine/metadata/orm --from-database --force

这会通过自省从数据库中构建实体映射文件。对于数据库上的每个表,这只会生成一个 .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/&lt; project_folder&gt;/src/&lt; vendor&gt;/&lt; bundle_name&gt;/Entity/&lt; entity&gt;.php

3)

php app/console doctrine:generate:entities < vendor>< nameBundle>**

这只会为所有实体类属性生成 getter 和 setter。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 确实如此。 mapping:convert 不会解析命名空间,而 mapping:import 会。就我的观察而言,这是唯一的区别。但是我尝试了第 2 步和第 3 步,但没有运行第 1 步,它生成的实体没有任何错误。我认为第一步和第二步是独立的。因为在第 1 步中,我们提供了路径信息,但在第 2 步中没有提及路径。那么step-2怎么知道step-1生成的文件在哪里呢?
    • 您是否尝试过具有外键的架构?我认为这是没有步骤 1 的情况,关系不完全合格。
    • 在处理 mapping:import 之前是否删除了元数据文件?对不起,如果很明显......:D
    • 我遵循了 3 个步骤,但是即使生成了等效的 orm.yml 和 orm.xml,也没有生成一些 .php 类,有什么想法吗?谢谢!
    • 您的实体都在同一个包中?如果不是,这些包是否由实体管理器映射?
    【解决方案3】:

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

    【讨论】:

    • 我尝试删除“MyBundle/Entity/”和“MyBundle/Resources/config/doctrine/”并执行第 2 步和第 3 步。成功生成类。我没有使用第 1 步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 2012-06-19
    • 1970-01-01
    • 2016-08-07
    • 2012-06-18
    相关资源
    最近更新 更多