I am a novice Zend Framework 2 and Doctrine developer. I could not find answers for the problems described below.
I am using multiple databases for one website. For example there is a users database with all user details and a database with statistics. It's possible that there are statistics for a user so there are relations (constrains) between both databases. For previous projects I used one configuration file and one class/directory with entities (for one db).
In the same project I use multiple versions of the databases (develop, testing, production) so I want to use prefixes for the database name. For example dev_users and tst_users. I think I should use a prefix from an configuration file and use it somewhere to prefix the databases.
At last I am really curious how other people use database entities when the have multiple modules using them.
Doctrine uses one Entity Manager per DB Connection. So you can connect to multiple databases but you can't link those entities. The only way to put constraints on entity from within Doctrine or within the database is if the are in the same DB.
You can however enforce the constraint yourself and use two separate Entity Managers however i wouldn't recommend this
the database connection details should be stored in your /config/autoload/local.php
or /config/autoload/{ownname}.local.php
and for ownname you can for example choose '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}',
),
),
),
),
);
The general doctrine setting like where your entites are located for reading the class meta data can be placed in /config/autoload/global.php
file or in a file ending with global.php
like in the previous with local or you can store it in your modules config file
The entities should be stored in your module in a directory Entity
like: root/module/{modulename}/src/{modulename}/Entity/
for how to store them see: Doctrine Documentation
if you use your entities with multiple modules it is better to make a common module and put that as a dependency with all the modules that require this entity
You can change your databases yourself for testing environments or use a module for chnaging between config files like: Config Module Which is made by the people who made ZF2