Zend 1.11和Doctrine 2 Auto生成现有数据库所需的一切

时间:2011-07-26 17:11:58

标签: php zend-framework doctrine doctrine-orm

我是ORM的新手,我非常渴望学习它。我成功地设法通过遵循本教程为Zend 1.11.x安装Doctrine 2.1的所有类和配置。

http://www.zendcasts.com/unit-testing-doctrine-2-entities/2011/02/使用Bisna插件和学说脚本。

现在我的问题是他清楚地解释了如何通过教义类创建实体和表,但没有解释如何从现有数据库中自动生成代理和repo类,这有助于我选择,插入和更新。我总是使用MySQL Workbench创建我的数据库。

我也跟着下面的教程

http://www.zend.com/en/webinar/Framework/70170000000bSrG-webinar-zf-v-1-doctrine-v-2-20101214.flv

我的数据库非常复杂,关系流过各种可能的方式。如果我按照这些教程中解释的步骤操作,我将永远不会完成我的项目。任何人都可以解释如何在配置后开始使用Doctrine。考虑到我已经有一个数据库,我的Model文件夹是空的。我的文件夹结构如下所示。

    C:/zf/library/Doctrine
    C:/zf/library/Symfony
    C:/zf/library/ZC -- (my model which should contain the proxies and repo of Doctrine. At the moment it contains nothing.)
    C:/zf/library/Zend
C:/zf/scripts/doctrine.php

请帮助我!

昨天我发布了同样的帖子,没有人回复我的帖子。如果您需要我的更多信息,请告诉我。

谢谢,

KARTHIK

3 个答案:

答案 0 :(得分:4)

根据Doctrine,您应该首先自己创建实体,然后从这些实体创建数据库模式。

但是因为你已经有了数据库,所以你可能不希望这样。可以将您的数据库转换为PHP,XML或Yaml中的Doctrine2实体。

你应该仔细看看Doctrine用Bisna胶水提供的命令行工具,因为你可以生成很多东西。

要从数据库生成实体,请考虑以下命令:

php doctrine.php orm:convert-mapping --from-database php ../library/Application/Entity

您还可以定义命名空间和实体必须扩展的基类:--namespace = namespace和--extends = class。

Doctrine2警告您将数据库转换为实体,因为并非所有内容都可以自动检测或支持。例如,Doctrine2中默认不支持ENUM数据类型,因此转换数据库会引发错误。

在使用之前检查所有实体尤其是关联是个好主意。希望它可以帮到你。

答案 1 :(得分:2)

如果我正确理解了您的问题,您已经配置了实体,并且需要自动生成代理和存储库类。

可以使用应用程序根目录中的以下Doctrine CLI命令创建两者:

php scripts/doctrine.php orm:generate-proxies

php scripts/doctrine.php orm:generate-repositories library/

如果您正在寻找一种自动生成实体类的方法,遗憾的是我认为还没有可用的解决方案。

ORM Designer的支持代表表示他们正在“正在”这项功能并且“非常需要”。这里希望它将包含在ORM Designer 2.0中,因为编码/映射实体类中通常会涉及很多可能会自动化的重复工作。

答案 2 :(得分:1)

如果您提供XML或YAML格式的映射信息,则可以使用orm:generate-entities命令。

请参阅http://www.doctrine-project.org/docs/orm/2.1/en/reference/tools.html#entity-generation

对于开发,请在您的配置中将代理生成设置为自动,否则,请使用orm:generate-proxies命令。

除非您需要自定义存储库,否则在请求时会在实体管理器中创建通用存储库。要指定自定义存储库,只需使用repository-class实体映射属性。

请参阅http://www.doctrine-project.org/docs/orm/2.1/en/reference/xml-mapping.html#defining-an-entity以获取示例