从数据库生成实体

时间:2014-04-28 17:12:55

标签: php mysql symfony doctrine

我试图从现有的空数据库中生成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的建议,我收到了以下信息:

  

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

4 个答案:

答案 0 :(得分:9)

您的案例在symfony网站上有详细记载,标题为 "How to generate Entities from an Existing Database"

正如文件所述:

  

从现有构建实体类的第一步   数据库是要求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不支持没有主键的表格进行逆向工程
  3. 要解决问题(1),您可以在教条配置部分添加custom mapping。例如,要将点类型映射为字符串,您可以编写:

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

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

答案 1 :(得分:9)

我收到了这个错误

Database does not have any mapping information.

在我的情况下,因为我有两个名为这样的表:

  1. mockstore_category
  2. mockstore_product
  3. 当我尝试使用此命令时:

    sudo php app/console doctrine:mapping:import --filter="MockstoreProduct" --force MockizartStoreBundle yml
    

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

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

    php app/console doctrine:mapping:import --filter="Product" --force MockizartStoreBundle yml
    

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

    希望得到这个帮助。

答案 2 :(得分:8)

遇到同样的问题,原来是缓存:

console c:c

解决了这个问题。

答案 3 :(得分:0)

就我而言,问题在于对数据库表的访问权限。 用户凭据正确,但该用户无权读取表。 你可以执行这样的事情来检查 php bin/console 准则:query:sql "SELECT * FROM YOURTABLE"