Monday, February 17, 2014

Multiple DB Connection in ZF2


1. update global.php
return array(
    'db' => array(
    'adapters' => array(
        'db' => array(
        'driver' => 'Pdo',
        'dsn' => 'mysql:dbname=db1;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
        ),
        'db_securitas' => array(
        'driver' => 'Pdo',
        'dsn' => 'mysql:dbname=db2;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
        ),
    ),
    ),
    'service_manager' => array( 
        'abstract_factories' => array(
            'Zend\Db\Adapter\AdapterAbstractServiceFactory',
        ),
    ),
);
2. Update local.php
return array(
    'db' => array(
    'adapters' => array(
        'db1' => array(
        'username' => 'user',
        'password' => 'pwd',
        ),
        'db2' => array(
        'username' => 'user',
        'password' => 'pwd',
        ),
    ),
    ),
);
3. Use adapter in Module.php of your module:
     // Add this method:
public function getServiceConfig()
{
return array(
    'factories' => array(
    'ModuleABC\Model\ABCTable' => function($sm)
    {
        $tableGateway = $sm->get('ABCTableGateway');
        $table = new ClientTable($tableGateway);
        return $table;
    },
    'ABCTableGateway' => function ($sm)
    {
        $dbAdapter = $sm->get('db1');
        $resultSetPrototype = new ResultSet();
        $resultSetPrototype->setArrayObjectPrototype(new ABC());
        return new TableGateway('abc', $dbAdapter, null, $resultSetPrototype);
    },
    'ModuleXYZ\Model\XYZTable' => function($sm)
    {
        $tableGateway = $sm->get('XYZTableGateway');
        $table = new BranchTable($tableGateway);
        return $table;
    },
    'XYZTableGateway' => function ($sm)
    {
        $dbAdapter = $sm->get('db2');
        $resultSetPrototype = new ResultSet();
        $resultSetPrototype->setArrayObjectPrototype(new XYZ());
        return new TableGateway('xyz', $dbAdapter, null, $resultSetPrototype);
    },
    ),
    );
}
4. Done!

No comments:

Post a Comment