【问题标题】:Zend 2 Framework - Doctrine generates tables from one entity from 2 givenZend 2 Framework - Doctrine 从一个给定的 2 个实体生成表
【发布时间】:2018-03-07 00:49:34
【问题描述】:

我从几天前开始使用 Zend 2,但遇到了一些麻烦。我们正在使用学说,并尝试从实体生成数据库模式。我在每个模块中指定学说应该使用每个模块的 module.config.php 文件找到实体的位置。目前我有 2 个模块和 2 个不同的 module.config 文件,这些是我指定 Doctrine 应该找到实体的路径的行:

module.config.php(邮件模板(模块))

'doctrine' => array(
        'driver' => array(
            'application_entities' => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => (__DIR__ . '/../src/MailTemplates/Model')
            ),
            'orm_default' => array(
                'drivers' => array(
                    'MailTemplates\Model' => 'application_entities'
                ),
            ),
        ),
    ),

和module.config.php(应用程序(模块))

'doctrine' => array(
        'driver' => array(
            'application_entities' => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => (__DIR__ . '/../src/Application/Entity')
            ),
            'orm_default' => array(
                'drivers' => array(
                    'Application\Entity' => 'application_entities'
                ),
            ),
        ),
    ),

);

当我执行命令从实体 (./vendor/bin/doctrine-module orm:schema-tool:create) 生成架构时,它只创建 MailTemplate 表,而忽略应用程序模块表。如果我注释 MailTemplate 模块的 module.config.php 的行,并再次执行该命令,我可以看到 Application Module 实体中的表已成功创建。所以我想不知何故,来自 2 个 module.config 文件的信息被覆盖了。

我需要从不同模块的不同实体生成 DB shema,但我不知道如何。

谢谢!!

【问题讨论】:

    标签: doctrine-orm zend-framework2


    【解决方案1】:

    原因是您为驱动程序设置了相同的名称。虽然 zend 合并配置,但它会覆盖具有相同名称的配置。

    module.config.php(邮件模板(模块))

    [...]
    'drivers' => array(    
        'MailTemplates\Model' => 'application_entities' <-- rename this
    )
    [..]
    

    module.config.php(应用程序(模块))

    [...]
    'drivers' => array(   
        'Application\Entity' => 'application_entities'
    )
    [..]
    

    【讨论】:

    • 非常感谢您的帮助! :) @leo_ap
    【解决方案2】:

    Zf2 module.config.php 文件没有被覆盖。 zf2 将所有 module.config.php 合并到一个文件中。

    Zend\ModuleManager\Listener\ConfigListener 在合并所有配置之后触发一个特殊事件,Zend\ModuleManager\ModuleEvent::EVENT_MERGE_CONFIG,但在它被传递给 ServiceManager 之前。通过侦听此事件,您可以检查合并的配置并对其进行操作。

    查看zend如何合并配置文件https://framework.zend.com/manual/2.4/en/tutorials/config.advanced.html#configuration-mapping-table

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2011-06-27
      相关资源
      最近更新 更多