从数据库生成实体

Dłu*_*ugi 7 php mysql doctrine symfony

我正在尝试从现有的空数据库生成symfony2中的实体(非常大,从头开始创建实体真的很痛苦).可悲的是,我遇到了相当大的问题.

当我尝试调用以下命令时(在Windows上,如果它改变任何东西):

php app/console doctrine:mapping:convert --force --from-database annotation ./src/GOutside/GOBundle/Resources/config/doctrine
Run Code Online (Sandbox Code Playgroud)

我得到以下消息:

没有要处理的元数据类.

在发布之前我已经:

  • 验证我的配置正常(我可以连接到数据库),
  • 我的包已创建,上面指定的路径有效
  • 当我尝试转换为xml/yml时,就像我尝试生成注释映射时一样.

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

在此先感谢您的帮助:)

在xiidea回复后编辑

当我尝试使用时

php app/console doctrine:mapping:import --force GOBundle xml
Run Code Online (Sandbox Code Playgroud)

正如@xiidea所建议的那样,我得到以下信息:

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

Kak*_*shi 10

我收到了这个错误

Database does not have any mapping information.
Run Code Online (Sandbox Code Playgroud)

在我的情况下,这是因为我有2个像这样命名的表:

  1. mockstore_category
  2. mockstore_product

当我尝试使用此命令时:

sudo php app/console doctrine:mapping:import --filter="MockstoreProduct" --force MockizartStoreBundle yml
Run Code Online (Sandbox Code Playgroud)

错误Database does not have any mapping information.出现了.但它没有,当我用它来生成--filter="MockstoreCategory".

因此要为mockstore_product表生成映射,它应该是:

php app/console doctrine:mapping:import --filter="Product" --force MockizartStoreBundle yml
Run Code Online (Sandbox Code Playgroud)

--filter="Product" --filter="MockstoreProduct"

希望这有帮助.


xii*_*dea 9

您的案例在symfony网站上有详细记录,标题为"如何从现有数据库生成实体"

正如文件所述:

从现有数据库构建实体类的第一步是要求Doctrine内省数据库并生成相应的元数据文件.元数据文件描述要基于表字段生成的实体类.

使用以下命令(假设您的软件包的简称是GOutsideGOBundle)

$ php app/console doctrine:mapping:import --force GOutsideGOBundle xml

然后你需要打电话.

php app/console doctrine:generate:entities GOutsideGOBundle

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

php app/console doctrine:mapping:convert annotation ./src

路径应该只有./src而不是./src/GOutside/GOBundle/Resources/config/doctrine

更新:

如果您的配置中的一切都正确,Database does not have any mapping information.则不太可能得到错误!我不确定这个错误.但是根据您的数据库表模式,有一些问题会阻止您创建映射信息.

  1. 您的表包含特殊类型,该原则无法处理.
  2. 您的数据库表有多个没有任何主键的表.Doctrine不支持没有主键的表的逆向工程

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

doctrine:
    dbal:
        //Other connection parameters
        mapping_types:
            point: string
Run Code Online (Sandbox Code Playgroud)

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


小智 8

有同样的问题,结果是缓存:

console c:c
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.