从数据库生成实体

7
我正在尝试从一个已经存在的空数据库中生成 Symfony2 中的实体(该数据库相当大,如果从头开始创建实体将是一项真正的痛苦)。不幸地是,我遇到了一个相当大的问题。
当我尝试在 Windows 上调用以下命令时:
php app/console doctrine:mapping:convert --force --from-database annotation ./src/GOutside/GOBundle/Resources/config/doctrine

我收到了以下消息:
“没有元数据类可处理。”
在发布之前,我已经:
- 验证了我的配置是否正确(我可以连接到数据库), - 我的 bundle 已经创建并且指定的路径有效, - 当我尝试转换为 xml/yml 时,与生成注释映射相同的情况发生。
Symfony 版本为 2.4.4,php 版本为 5.5.3。
提前感谢您的帮助 :)
xiidea 回复后编辑:
当我尝试使用...
php app/console doctrine:mapping:import --force GOBundle xml

根据@xiidea的建议,我得到了以下信息:
数据库没有任何映射信息。
4个回答

10

我收到了这个错误消息

Database does not have any mapping information.

我的情况是因为我有两个表格的名称如下:

  1. mockstore_category
  2. mockstore_product

当我使用这个命令时:

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

出现了错误数据库没有任何映射信息。,但是当我使用它来生成--filter="MockstoreCategory"时,却没有出现这个错误。

因此,为了生成mockstore_product表的映射,应该是:

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

--filter="产品" 而不是 --filter="模拟商店产品"

希望这可以帮到您。


1
这个答案对我很有帮助,谢谢。我尝试了 --filter="calendar" 但它只能使用大写名称,比如 --filter="Calendar" - Gábor Nagy
这个回答提到了一个案例问题,请为它点赞。谢谢! - Azhar Khattak

10

你的情况在Symfony网站上有很好的文档,标题为“如何从现有数据库生成实体”

根据文档所述:

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

使用以下命令(假设您的bundle短名称为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. 你的表包含特殊类型point,Doctrine无法处理。
  2. 你的数据库表有多个没有任何主键的表。Doctrine不支持从没有主键的表进行反向工程

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

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

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


看起来我错过了那个导入步骤,但遗憾的是 - 如果我尝试执行doctrine:mapping:import命令,会收到“数据库没有任何映射信息”的错误消息。 - Długi
@Długi:据我所记,当没有表时,“数据库没有任何映射信息”会显示出来。您可以检查一下您的数据库配置是否正确,特别是数据库名称。如果您的信息无误,能否分享一两个表模式? - xiidea
这是基本的MySQL配置,所以很简单(没有密码,本地主机等),但这里有表格导出- http://pastebin.com/02tnzgp6 希望这可以帮到你! - Długi
@Długi:如果你所说的一切都是真实的,我不确定为什么会出现这样的错误!!但根据你的表模式,它应该无法正常工作,原因如下:1. 你的表包含特殊类型**point**,Doctrine无法处理。2. 你的数据库表有多个没有主键的表。Doctrine不支持从没有主键的表进行反向工程设计 - xiidea

8

我曾经遇到过同样的问题,最后发现是缓存引起的:

console c:c

解决了问题。

0
在我的情况下,问题出在对数据库表的访问权限上。 用户凭据是正确的,但该用户没有读取表的权限。 您可以执行类似以下命令来检查: php bin/console doctrine:query:sql "SELECT * FROM YOURTABLE"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接