现在项目中多数会用到数据库多库的切换场景,在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(); ?>
相关推荐
总结,通过Yii框架的灵活配置和扩展支持,我们可以实现读写分离和分库分表,有效提升系统的数据库性能。同时,需要注意在设计过程中充分考虑数据的一致性和查询的便利性,以确保系统的稳定性和可维护性。
Yii框架是PHP开发中的一个高性能、基于组件的MVC(模型-视图-控制器)框架,特别适合开发大型Web应用。...通过深入研究源码,开发者不仅可以提升Yii框架的掌握程度,还能学习到电子商务系统的设计和实现技巧。
Fecshop是一款基于PHP的Yii2框架构建的开源电商系统,专为实现高效、灵活且功能丰富的在线购物体验而设计。Yii2框架以其高性能、安全性和可扩展性著称,使得Fecshop在电商领域中脱颖而出。下面我们将深入探讨Fecshop...
通过分析和学习这个项目,开发者不仅可以掌握Yii框架的使用,还能了解到商城系统设计的全过程,包括需求分析、数据库设计、前后端交互、安全策略等多个方面,这对于提升Web开发技能和项目经验非常有益。
最后,Yii框架具有良好的社区支持和丰富的扩展库,如yiisoft/yii2-gii自动生成代码工具,yiisoft/yii2-debug调试工具,以及各种第三方组件,如用户认证和权限管理RBAC(Role-Based Access Control),这些都可以...
vendor目录包含了所有通过Composer安装的第三方库,包括Yii框架本身。 开发Yii 2.0.11项目时,开发者可以利用Gii代码生成工具快速创建模型、控制器和视图文件,减少手动编码的工作量。此外,框架内置的单元测试和...
1. **framework**:这是Yii框架的核心代码库,包含各种组件、类库和工具。 - **base**:基础类,提供基本的类定义,如CApplication、CComponent等。 - **db**:数据库相关的组件,如CDbConnection、CDbCommand等。...
15、完全面向对象:Yii框架坚持严格的面向对象编程范式。它没有定义任何全局函数或变量。而且,它定义的类层次结构允许最大的可重用性和定制。 16、友好的使用第三方代码:Yii精心设计让它第三方代码非常好的...
**Yii框架概述** Yii是一款高性能、基于组件的PHP框架,专为Web2.0应用设计。它极大地简化了Web应用程序的开发过程,提供了一系列强大的特性,包括MVC(模型-视图-控制器)架构模式、数据库抽象层、缓存管理、身份...
在本项目中,“yii mongodb 小说系统.zip”是一个基于Yii框架和MongoDB数据库构建的小说管理系统。Yii是一个高效的PHP框架,专为Web 2.0应用开发而设计,而MongoDB则是一种流行的NoSQL数据库,特别适合处理大量非...
3. **数据库设计与创建**:根据需求文档设计并创建数据库表结构。 4. **前端页面设计**:绘制UI界面原型图,编写HTML/CSS代码实现页面布局。 5. **后端逻辑实现**:编写控制器、模型和服务层代码实现业务逻辑。 6. *...
"yii2 图片上传扩展插件"就是为了简化这一过程而设计的。 该插件主要解决以下问题: 1. **图片预览**:允许用户在上传前预览图片,提高用户体验。 2. **多文件上传**:支持一次上传多个图片文件,提高效率。 3. **...
【老爷车yii点位盘 乐酒商城系统微盘源码+完整数据】是一个基于Yii框架开发的H5移动端电商系统。...通过深入研究这个源码,开发者不仅可以熟悉Yii框架的应用,还能掌握H5移动端电商系统的设计和实现。
描述 "yii2 rbac yii2 rest RBAC Auth manager for-yii2-rest-rbac" 似乎简略地重复了标题中的信息,但我们可以从中推测这个资源是专门为了在 Yii2 中管理和实现 RESTful API 的 RBAC 控制而设计的。 标签为空,...
6. **数据库优化**:为了处理大量用户和商品数据,YiiPiN可能运用了数据库索引、分表分库、读写分离等策略,确保系统的高并发性能。 7. **支付集成**:电商系统通常需要集成第三方支付接口,如支付宝、微信支付等,...
FunBoot可能是一个基于Yii2的开源SaaS框架,专为快速构建企业级SaaS应用而设计。 以下是关于Yii2 SaaS平台升级和FunBoot的一些关键知识点: 1. **Yii2框架**:Yii2是用PHP编写的,它提供了一个强大的MVC(模型-...
8. **数据库交互**:如果GTreeTable涉及到数据存储,那么它可能与Yii2的ActiveRecord或查询构建器一起工作,以便与数据库进行交互。 9. **API接口**:如果GTreeTable用于展示从API获取的数据,开发者可能需要理解...
该压缩包文件“基于Yii2的企业级商城系统源码和微信小程序.zip”包含了一套完整的企业级电商解决方案,集成了Yii2框架的后端开发和微信小程序的前端展示。这个项目可能适合那些正在进行毕业设计或者想要了解企业级...