具有前缀的多个数据库


Multiple databases with prefixes

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

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

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

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

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

最后,我真的很好奇当有多个模块使用数据库实体时,其他人如何使用它们。

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

原则为每个数据库连接使用一个实体管理器。因此,您可以连接到多个数据库,但无法链接这些实体。从 Doctrine 或数据库中对实体施加约束的唯一方法是如果它们位于同一数据库中。

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

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

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

学说.本地.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}',
                ),
            ),
        ),
    ),
);

一般的学说设置,如你的实体在哪里读取类元数据,可以放在/config/autoload/global.php文件中,也可以放在以global.php结尾的文件中,就像前面的本地一样,或者你可以把它存储在你的模块配置文件中

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

实体应存储在模块中的目录中,Entity如下:root/module/{modulename}/src/{modulename}/Entity/

有关如何存储它们,请参阅:原则文档

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

  • 测试模式

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