Zend 2 Framework - Doctrine从给定的2个实体生成表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zend 2 Framework - Doctrine从给定的2个实体生成表相关的知识,希望对你有一定的参考价值。

几天后我和Zend 2合作,我有点麻烦。我们正在使用doctrine,并尝试从实体生成数据库模式。我在每个模块中指定doctrine应该使用每个模块的module.config.php文件找到实体。目前我有2个模块和2个不同的module.config文件,这些是我指定Doctrine应该找到实体的路径的行:

module.config.php(MailTemplates(Module))

'doctrine' => array(
        'driver' => array(
            'application_entities' => array(
                'class' => 'DoctrineORMMappingDriverAnnotationDriver',
                'cache' => 'array',
                'paths' => (__DIR__ . '/../src/MailTemplates/Model')
            ),
            'orm_default' => array(
                'drivers' => array(
                    'MailTemplatesModel' => 'application_entities'
                ),
            ),
        ),
    ),

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

'doctrine' => array(
        'driver' => array(
            'application_entities' => array(
                'class' => 'DoctrineORMMappingDriverAnnotationDriver',
                'cache' => 'array',
                'paths' => (__DIR__ . '/../src/Application/Entity')
            ),
            'orm_default' => array(
                'drivers' => array(
                    'ApplicationEntity' => 'application_entities'
                ),
            ),
        ),
    ),

);

当我执行命令从实体生成模式(./vendor/bin/doctrine-module orm:schema-tool:create)时,它只创建MailTemplate表,并忽略Application模块表。如果我评论MailTemplate模块的module.config.php的行,并再次执行该命令,我可以成功创建应用程序模块实体中的表。所以我想以某种方式来自2 module.config文件的信息被覆盖。

我需要从不同模块的不同实体生成数据库模式,我不知道如何。

谢谢!!

答案

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

module.config.php(MailTemplates(Module))

[...]
'drivers' => array(    
    'MailTemplatesModel' => 'application_entities' <-- rename this
)
[..]

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

[...]
'drivers' => array(   
    'ApplicationEntity' => 'application_entities'
)
[..]
另一答案

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

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

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

以上是关于Zend 2 Framework - Doctrine从给定的2个实体生成表的主要内容,如果未能解决你的问题,请参考以下文章

Zend Framework 2 入门

文件上传表单的 Zend 验证器大小 - Zend Framework 2.3

文件上传表单的 Zend 验证器大小 - Zend Framework 2.3

如何模拟 Zend\Form 提交而不在 Zend Framework 2/3 中显示表单?

让 Zend Framework 2 Memcached 工作

Zend Framework 2 & PHPUnit - 模拟 Zend\Db\Adapter\Adapter 类