【问题标题】:Generating mapping information on existing database use Doctrine 2在现有数据库上生成映射信息使用 Doctrine 2
【发布时间】:2011-01-30 18:02:09
【问题描述】:

我在 Zend Framework 1.10 上设置了 Doctrine 2,并且正确设置了所有自动加载,包括 application.ini 中所有必要的配置设置。我现在需要做的(或者我相信)是使用映射信息创建我的实体类,以便实体管理器可以使用我的数据库。

我不想做的是手工编写实体类,因为这需要很长时间,但我似乎无法弄清楚下一步该做什么。命令行工具是否具有从现有架构创建实体、代理和所有其他必要类的功能?

【问题讨论】:

  • 我现在已经设法为我现有的数据库生成 yaml 映射,它们被放置在 APPLICATION_PATH "/data/yaml" 现在当我尝试使用 orm:generate-entities ..\library\Application \Entity 期望它从 yaml 映射生成实体类,它失败并显示消息“没有要处理的元数据类”
  • 您是否能够找出导致“无元数据类”错误的原因?只要我不将“newDefaultAnnotationDriver”与基于 PHP 的注释一起使用,我就可以使用 YAML/XML 生成映射。快把我逼疯了!

标签: zend-framework doctrine-orm


【解决方案1】:

可以使用Doctrinehttp://www.doctrine-project.org/docs/orm/2.0/en/reference/tools.html#reverse-engineering的逆向工程工具

但它也没有检测到参考中提到的所有内容。

最好的办法是进行逆向工程,然后手动填充其余部分。

【讨论】:

    【解决方案2】:

    使用命令行工具:

     ./bin/doctrine orm:convert-mapping --from-database xml ./bin/tmp
    

    这将生成您的 xml 映射。然后,确保在配置 Doctrine CLI 工具时将驱动程序更改为 XmlDriver

    $driver = new \Doctrine\ORM\Mapping\Driver\XmlDriver(array(
        APPLICATION_PATH . '/../bin/tmp'             
    ));
    $config->setMetadataDriverImpl($driver);
    

    我的 CLI 配置使用 Zend_Application,所以我通常在我的 Bootstrap 中更改它。

    现在运行

    ./bin/doctrine orm:generate-entities ./bin/tmp
    

    orm:generate-entities 需要 Xml 元数据驱动程序才能从 xml 转换为实体。如果您使用默认注释驱动程序,它会将注释驱动程序路径中的实体转换为我们不想要的实体。

    【讨论】:

    • 对于 Zend 2(实际上只是另一种方式),您需要更新 vendor/doctrine/doctrine-module/bin/doctrine-module.php 文件并在最后两行之前添加以下内容:$driverImpl = new \Doctrine\ORM\Mapping\Driver\XmlDriver( array('./bin/tmp'));/* @var $em \Doctrine\ORM\EntityManager */$em = $application->getServiceManager()->get('doctrine.entitymanager.orm_default');$em->getConfiguration()->setMetadataDriverImpl($driverImpl);
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2012-01-09
    • 2013-10-30
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多