现在项目中多数会用到数据库多库的切换场景,在Yii中是如何实践的呢?
其实通过动态设置
Yii::app()->setComponent(array('key'=>数据库连接的配置文件));
具体代码:
<?php class FSDB extends CComponent { /** * 以$cityCode为键的二维数组。 * @var array */ private static $dbInstance = array(); /** * 数据库配置前缀。 * * @var string */ const DB_ID = 'web_db_'; /** * 私有构造方法,防止类被直接实例化。 */ private function __construct() { } /** * 获取唯一实例。 * * @param string $cityCode 城市简拼 * @return instance of object */ public static function Instance($cityCode) { if(!isset(self::$dbInstance[$cityCode])) { self::$dbInstance[$cityCode] = self::init($cityCode); } return self::$dbInstance[$cityCode]; } /** * 初始化函数。 * @param string $cityCode 城市简拼 * @param Object Yii 框架对象实例 */ public static function init($cityCode) { $dbLink = self::DB_ID.$cityCode; if(Yii::app()->hasComponent($dbLink)) { return Yii::app()->$dbLink; } $dbConf = self::_getCityDBConfig($cityCode); if(FALSE === $dbConf) { throw new CException("Did not declare the database configuration!"); } Yii::app()->setComponents(array($dbLink => $dbConf)); return Yii::app()->$dbLink; } /** * 获取城市DB配置。 * * @param string $cityCode 城市简拼 * @return boolean|array DB配置或假 */ private static function _getCityDBConfig($cityCode){ $cityCode = strtoupper($cityCode); $dbconfig = self::_getMasterConf($cityCode); if($slave){ $dbconfig['slaves'] = self::_getSlaveConf($cityCode); } return $dbconfig; } /** * 取主库配置文件。 * * @param string $cityCode * @return array */ private static function _getMasterConf($cityCode) { return array( 'class' => 'DbConnection', 'connectionString' => mysql:host=;dbname=;port=", 'emulatePrepare' => true, 'username' => , 'password' => , 'tablePrefix' => 't_', 'charset' => 'utf8', 'enableProfiling' => true, // 'enableParamLogging' => true, // ); } /** * 取从库配置文件。 * * @param string $cityCode * @return array */ private static function _getSlaveConf($cityCode) { return array( array( 'connectionString' => mysql:host=;dbname=;port=", 'emulatePrepare' => true, 'username' => , 'password' => , 'charset' => 'UTF8', 'tablePrefix' => 't', 'enableParamLogging' => YII_DEBUG, 'schemaCacheID' => 'cache', 'schemaCachingDuration' => 0, ) ); } }
调用方法:
<? $cityCode = 'bj'; $dbx = FSDB::Instance($cityCode); $result = $dbx->createCommand("select 8 * 8;")->queryAll(); ?>
相关推荐
php YII框架数据库备份模块
Yii框架数据库操作分享ppt (Mac版,windows需转换格式)
很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架
主要介绍了Yii框架数据库查询、增加、删除操作,结合实例形式总结分析了Yii框架数据库查询、增加、删除相关模型与控制器使用技巧,需要的朋友可以参考下
yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架yii框架
本书不是简单地介绍如何使用 Yii 框架,而是站在框架设计的高度,从源代码级别深 度剖析。本书首先介绍 PHP 框架技术的概念及其应用领域,然后开始仿照 Yii 框架源代码 自定义框架,其中包括了 MVC 设计模式、单入口...
据说是超越所有的PHP框架php最新框架YII框架php最新框架YII框架
Yii Yii框架 Yii框架快速入门,自己整理的很全的,很容易看懂
主要介绍了yii框架数据库关联查询操作,结合实例形式总结分析了yii数据库关联查询的常见操作方法与使用注意事项,需要的朋友可以参考下
yii1.1中文文档 yii框架中文手册教程.pdf
yii框架教程yii框架教程yii框架教程yii框架教程yii框架教程yii框架教程
YII框架中文手册,希望帮助需要帮助的人!
YII框架的开发中文文档,帮助哪些正在学习YII框架的同学们,
Yii 框架简介 全面轻松入手Yii 从这里开始 简单 明了 言简意赅
YII 2数据库迁移(Migrations) 使用教程,使用migrate功能迁移数据库
这是yii框架修复1.1.14漏洞后的最新版本1.1.15
Yii框架快速入门,本教材适用于PHP5.3以上,PHP5.2可能会存在 细节上的差异,主要介绍Yii入门的一些基础知识和简单例子.
YII框架简介。学习yii框架必须要掌握的基础知识。
YII框架源码分析,这个比较适合深度去了解框架的原理!
yii框架源码分析