Zend framework 2 配置多数据库

2014年02月24日

由浅入深详细剖析Zend Framework 2 数据库连接,获取数据,请点击这里。

首先,配置config/auto/global.php

<?php
/**
 * This source file is part of Qiai.
 *
 * PHP Version >=5.3
 *
 * @category   Qiais-Project
 * @package    Config
 * @subpackage Global
 * @author     Sai (QIAI) <sai@qiais.com>
 * @license    Free http://www.qiai.com/license-free
 * @link       http://www.qiais.com
 */

return array(
    'db' => array(
        //这是主适配器,如果不需要使用Zend\Db\Adapter\Adapter的话,可以不配置
        'driver'         => 'Pdo',
        'dsn'             => 'mysql:dbname=qiais_cn;host=localhost',
        'username' => 'qiais',
        'password' => 'qiais312',
        'driver_options'  => array(
             PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
         ),
        //多数据库配置
        'adapters' => array(
            'qiais_cn' => array(
                'driver' => 'Pdo',
                'dsn' => 'mysql:dbname=qiais_cn;host=localhost',
                'username' => 'qiais',
                'password' => 'qiais312',
                'driver_options' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
                ),
            ),
            'qiais_jp' => array(
                'driver' => 'Pdo',
                'dsn' => 'mysql:dbname=qiais_jp;host=localhost',
                'username' => 'qiais',
                'password' => 'qiais312',
                'driver_options' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
                ),
            ),
        )
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter'
                    => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
        'abstract_factories' => array(
            'Zend\Db\Adapter\AdapterAbstractServiceFactory',
        ),
    ),
);

这里有2个数据库,qiais_cn, qiais_jp, 因为我程序别的地方要用到Zend\Db\Adapter\Adapter,所以额外配置了主适配器。如果不需要使用Zend\Db\Adapter\Adapter的话。只要如下配置就可以:

<?php
/**
 * This source file is part of Qiai.
 *
 * PHP Version >=5.3
 *
 * @category   Qiais-Project
 * @package    Config
 * @subpackage Global
 * @author     Sai (QIAI) <sai@qiais.com>
 * @license    Free http://www.qiai.com/license-free
 * @link       http://www.qiais.com
 */

return array(
    'db' => array(
        'adapters' => array(
            'qiais_cn' => array(
                'driver' => 'Pdo',
                'dsn' => 'mysql:dbname=qiais_cn;host=localhost',
                'username' => 'qiais',
                'password' => 'qiais312',
                'driver_options' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
                ),
            ),
            'qiais_jp' => array(
                'driver' => 'Pdo',
                'dsn' => 'mysql:dbname=qiais_jp;host=localhost',
                'username' => 'qiais',
                'password' => 'qiais312',
                'driver_options' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
                ),
            ),
        )
    ),
    'service_manager' => array(
        'abstract_factories' => array(
            'Zend\Db\Adapter\AdapterAbstractServiceFactory',
        ),
    ),
);

编辑module/Application/src/Application/Controller/IndexController.php

<?php
/**
 * This source file is part of Qiai.
 *
 * PHP Version >=5.3
 *
 * @category   Qiais-Project
 * @package    Application
 * @subpackage Controller
 * @author     Sai (QIAI) <sai@qiais.com>
 * @license    Free http://www.qiai.com/license-free
 * @link       http://www.qiais.com
 */
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Debug\Debug;
use Zend\Db\Adapter\Adapter;

/**
 * Login controller for user module
 *
 * @category   Qiais-Project
 * @package    Application
 * @subpackage Controller
 */
class IndexController extends AbstractActionController
{
    /**
     * getMutipleDB Action
     * 通过zf2配置文件,连接多个数据库,获取数据
     *
     * @return false
     */
    public function getMultipleDbAction()
    {
        //合并两数据库用的数组
        $users = array();

        //数据库 qiais_cn连接
        $qiaisCn = $this->getServiceLocator()->get('qiais_cn');
        $usersCn = $qiaisCn->query("select * from users", Adapter::QUERY_MODE_EXECUTE);
        foreach ($usersCn as $key => $cn) {
            $users[] = $cn;
        }
        
        // 数据库 qiais_jp连接
        $qiaisJp = $this->getServiceLocator()->get('qiais_jp');
        $usersJp = $qiaisJp->query("select * from users", Adapter::QUERY_MODE_EXECUTE);
        foreach ($usersJp as $key => $jp) {
            $users[] = $jp;
        }

        $viewModel = new ViewModel(array('users' => $users));
        $viewModel->setTemplate('application/index/get-data-by-code.phtml');
        return $viewModel;
    }

    /**
     * getDataByConfiguration Action
     * 通过zf2配置文件,连接数据库,获取数据
     *
     * @return false
     */
    public function getDataByConfigurationAction()
    {
        $db = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
        $users = $db->query("select * from users", Adapter::QUERY_MODE_EXECUTE);

        $viewModel = new ViewModel(array('users' => $users));
        $viewModel->setTemplate('application/index/get-data-by-code.phtml');
        return $viewModel;
    }

    ......

访问http://zf2-tutorial/application/index/get-multiple-db

db-multiple-db

这里我们的中文数据库数据与日文数据库数据显示出来了