2014-04-08 50 views
0

我是Zend Framework 2和Doctrine开发者的新手。我找不到下面描述的问题的答案。带前缀的多个数据库

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

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

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

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

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

回答

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

Doctrine为每个数据库连接使用一个实体管理器。所以你可以连接到多个数据库,但你不能链接这些实体。从Doctrine或数据库内部对实体施加约束的唯一方法是如果它们在同一个数据库中。

您可以自己却强制约束和使用两个独立的实体管理器 但是我不会推荐这

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

数据库连接细节应贮存在您的/config/autoload/local.php/config/autoload/{ownname}.local.php和ownname例如,您可以选择“教义”

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}', 
       ), 
      ), 
     ), 
    ), 
); 

的一般原则设置像您的实体位于阅读类元数据可以放在/config/autoload/global.php文件或以global.php结尾的文件中,就像之前的本地文件一样,或者您可以将其存储在您的模块配置文件中

  • 我该在哪里存储实体?

的实体应存放你的模块放在一个目录Entity,如: 根/模块/ {模块名}/src目录/ {模块名} /实体/

为如何存储他们看到:Doctrine Documentation

如果您使用实体多个模块,最好是做一个通用模块,并把那作为一个依赖与所有需要这种实体

  • 测试模模块Ë

你可以改变自己的数据库,用于测试的环境或者使用一个模块的配置文件之间chnaging,如: Config Module这是通过谁做ZF2

+0

这是我现在使用的配置人民作出。它不适用于多个数据库,因为* {db} *仅设置为* 1 * db。这也不适用于数据库的前缀。 –

+0

如果你创建一个抽象工厂,你可以在servicemanager中为你的服务添加前缀,并根据你提供的配置创建尽可能多的适配器 –