带有前缀的多个数据库

时间:2014-04-08 10:23:46

标签: php database doctrine-orm zend-framework2 doctrine-odm

我是Zend Framework 2和Doctrine开发人员的新手。我找不到下面描述的问题的答案。

我在一个网站上使用多个数据库。例如,有一个用户数据库,其中包含所有用户详细信息和一个包含统计信息的数据库。可能存在用户的统计信息,因此两个数据库之间存在关系(约束)。对于以前的项目,我使用了一个配置文件和一个带有实体的类/目录(一个数据库)。

  • 如何在一个项目中使用具有正确表关系的多个数据库?
  • 我应该如何/在哪里存储数据库配置?
  • 我应该如何/在哪里存储实体?

在同一个项目中,我使用多个版本的数据库(开发,测试,生产),所以我想为数据库名称使用前缀。例如 dev _users和 tst _users。 我想我应该使用配置文件中的前缀并在某处使用它来为数据库添加前缀。

  • 我应该如何为所有数据库添加前缀?

最后,我很好奇其他人在使用多个模块时如何使用数据库实体。

1 个答案:

答案 0 :(得分:0)

  • 如何在一个项目中使用具有正确表关系的多个数据库?

Doctrine每个数据库连接使用一个实体管理器。因此,您可以连接到多个数据库,但无法链接这些实体。在Doctrine或数据库中对实体设置约束的唯一方法是,它们是否在同一个DB中。

然而,您可以自己强制执行约束并使用两个单独的实体管理器 但是我不推荐这个

  • 我应该如何/在哪里存储数据库配置?

数据库连接详细信息应存储在/config/autoload/local.php/config/autoload/{ownname}.local.php中,对于您自己的名称,您可以选择' doctrine'

doctrine.local.php

<?php

return array(
    'doctrine' => array(
        'connection' => array(
            'orm_default' => array(
                'configuration' => 'orm_default',
                'driverClass' =>'Doctrine\DBAL\Driver\PDOMySql\Driver',
                'eventmanager' => 'orm_default',
                'params' => array(
                    'host' => 'localhost',
                    'port' => '3306',
                    'user' => '{username}',
                    'password' => '{password}',
                    'dbname' => '{db}',
                ),
            ),
        ),
    ),
);

一般学说设置,例如您的entites用于阅读类元数据的位置,可以放在/config/autoload/global.php文件中,也可以放在以global.php结尾的文件中,就像之前使用本地文件一样,或者您可以存储它在你的模块配置文件

  • 我应该如何/在哪里存储实体?

实体应存储在模块中的Entity目录中,如: 根/模块/ {模块名} / SRC / {模块名} /实体/

如何存储它们请参阅:Doctrine Documentation

如果您使用具有多个模块的实体,最好制作一个通用模块,并将其作为所有需要此实体的模块的依赖项

  • 测试模式

您可以自行更改数据库以用于测试环境,也可以使用模块在配置文件之间进行更新,例如: Config Module这是由制作ZF2的人制作的