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
这里我们的中文数据库数据与日文数据库数据显示出来了
