一尘不染

从数据库生成实体

mysql

我正在尝试从现有的空数据库中生成symfony2中的实体(相当大,从头开始创建实体确实很痛苦)。不幸的是,我遇到了很大的问题。

当我尝试调用以下命令时(在Windows上如果发生任何更改):

php app/console doctrine:mapping:convert --force --from-database annotation ./src/GOutside/GOBundle/Resources/config/doctrine

我收到以下消息:

没有要处理的元数据类。

发布之前,我已经:

  • 验证我的配置正常(我可以连接到数据库),
  • 我的捆绑软件已创建,上面指定的路径有效
  • 当我尝试转换为xml / yml时,与尝试生成注释映射时,会发生相同的事情。

Symfony版本是2.4.4,php版本是5.5.3。

预先感谢您的帮助:)

xiidea回复后编辑

当我尝试使用

php app/console doctrine:mapping:import --force GOBundle xml

根据@xiidea的建议,我收到以下消息:

数据库没有任何映射信息。


阅读 329

收藏
2020-05-17

共1个答案

一尘不染

您的案例在symfony网站上有很好的记录,该网站的标题为
“如何从现有数据库生成实体”

如文档所述:

从现有数据库构建实体类的第一步是要求Doctrine对数据库进行内部检查并生成相应的元数据文件。元数据文件描述了要基于表字段生成的实体类。

使用以下命令(假设捆绑包的简称为 GOutsideGOBundle

$ PHP应用程序/控制台学说:映射:导入–force GOutsideGOBundle xml

然后,您需要致电。

PHP应用程序/控制台学说:生成:实体GOutsideGOBundle

如果需要使用注释映射生成实体类,则必须先执行以下命令 doctrine:generate:entities

PHP应用程序/控制台学说:映射:转换注释./ src

路径应仅为 ./src 而不是 ./src/GOutside/GOBundle/Resources/config/doctrine

更新:

如果您的配置中的所有内容都正确,那么Database does not have any mapping information.就不可能出现错误!我不确定这个错误。但是根据您的数据库表架构,存在一些问题,这些问题将阻止您创建映射信息。

  1. 您的表包含该学说无法处理的特殊类型的
  2. 您的数据库表具有多个没有任何主键的表。 Doctrine不支持从没有主键的表进行逆向工程

要解决问题(1),您可以在主义配置部分中添加自定义映射。例如,将点类型映射为字符串,您可以编写:

doctrine:
    dbal:
        //Other connection parameters
        mapping_types:
            point: string

对于第二个问题,您需要为这些表定义主键,这些键可以是新字段,也可以是复合主键。

2020-05-17