Yii连接多个数据库的方法
一、配置多数据库
大多数情况下,我们都会采用同一类型的数据库,只是为了缓解压力分成主从或分布式形式而已。声明你可以在
主配置文件
(
main.php
)
中里声明其它的数据库连接:
<?php
......
'components'=>array(
'db'=>....//
主链接
'db1'=>...//
从连接
1
'db2'=>...//
从连接
2
)
......
操作在代码里,可以通过
Yii::app()->db1
和
Yii::app()->db2
获得两个从连接。
'db1'
=>
array
(
'class'
=>
'CDbConnection'
,
'connectionString'
=>
'mysql:host=localhost;dbname=test;charset=
…
'
,
'emulatePrepare'
=>
true
,
'username'
=>
'test'
,
'password'
=>
'test'
,
'charset'
=>
'utf8'
,
)
,
第二个以后的
db1
数组中一定要写上
class
参数,让
Yii
知道你在定义一个数据库连接对象,不然会报错。
一旦我们这样定义以后,就可以通过
Yii::app()->db1
来指向第二个数据库了。
二、重载
GetDbConnection()
方法
因为每个
Model
都是(直接或者间接地)继承自基类
CActiveRecord
的,因此,都包含
GetDbConnection()
这个方法,
GetDbConnection()
返回一个数据库连接对象的句柄。我们需要
在模型(
model
)里面通过重载这个方法来返回我们需要的数据库对象。
然后,假设我们新建了一文件
:
protected/components/Sub1ActiveRecord.php
,然后在你的所有要用
db1
这
个数据库的
model
里
extend Sub1ActiveRecord
而不是
CActiveRecord
。
这里我们是通过扩展
Yii
通用类来定义一个新的类,
而不是在每个模型里面都重
载
getDbConnection
方法,
这样做的好处是更大程度上的代码重用,
节省时间。
重载代码如下:
// protected/components/MyActiveRecord.php
class
Sub1
ActiveRecord
extends
CActiveRecord
{
public
function
getDbConnection
()
{
if
(
self
::
$db
!==
null
)
return
self
::
$db
;
else
{
//
这里就是我们要修改的
self
::
$db
=
Yii
::
app
()
->
getComponent
(
'db1'
)
;
//self::$db=Yii::app()->db1;
if
(
self
::
$db
instanceof CDbConnection
)
return
self
::
$db
;
else
throw
new
CDbException
(
Yii
::
t
(
'yii'
,
'Active Record requires a
"db1" CDbConnection application component.'
))
;
}
}
...........
}
三,在模型中使用
经过以上两步以后,我们就可以这样来用:
1
2
3
4
5
// protected/models/Ad.php
class
Ad
extends
Sub1ActiveRecord
{
...
}
Yii连接多个数据库的方法的更多相关文章
- 详解连接SQL Server数据库的方法,并使用Statement接口实现对数据库的增删改操作
总结一下,连接SQL Server数据库需要以下几个步骤: 1. 导入驱动Jar包:sqljdbc.jar 2. 加载并注册驱动程序 3. 设置连接路径 4. 加载并注册驱动 5. 连接数据库 6. ...
- 远程连接sql server 数据库的方法
今天找了半天,终于解决了如何从本地连接到远程sql server服务器的方法. 1.首先确保打开远程服务器的sql server配置管理器,确保TCP/IP协议开启 2.WebConfig的连接字符格 ...
- Python基于Pymssql模块实现连接SQL Server数据库的方法
首先,安装pymssql第三方库pip install pymssql 其次,导入pymssql库 最后们就可以连接数据库了 import pymssql server = "10.10.9 ...
- FireDAC 连接access MDB数据库的方法
Use Cases Open the Microsoft Access database. DriverID=MSAcc Database=c:\mydata.mdb Open the Microso ...
- 【转】Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- Java 通过JDBC连接Mysql数据库的方法和实例
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- 通过MSSQL连接服务器连接至Oracle数据库
前言 有很多时候,我们需要MSSQL与Oracle进行跨库查询或数据交互.本篇随笔将阐述如何通过MSSQL的连接服务器连接至Oracle数据库,并且读取数据的示例. 具体步骤 首先需要到Oracle的 ...
- ThinkPHP连接sql server数据库
亲身经历,在网上找连接sql server数据库的方法,还是不好找的,大多数都是照抄一个人的,而这个人的又写的不全,呵呵,先介绍一下我连接的方法吧.如果你是用THINKPHP连接,那么最重要的就是配置 ...
随机推荐
- APM (应用性能管理)
在信息科学和系统控制领域,APM是用来监控和管理应用软件是否有效运行的.APM通过监测和分析应用的表现去保证软件应用的良好运行,APM已经商用. 基本定义 APM = Application Perf ...
- ios开发--苹果企业开发者账号
苹果企业开发者账号添加多个开发成(组)员的方法 如果你们公司有一个帐号,你是管理员,加入组员的办法如下: 第一步:进入Member Center页 第二步:点击people,会见到 第三步:点击Inv ...
- linux下python启动第三方程序,并控制关闭
import subprocess import os import signal p = subprocess.Popen("recordmydesktop -o /home/test/t ...
- Linux系统监视资源与进程管理
Linux 系统中时刻运行着许多的进程,如果能够合理的管理它们,有益于系统性能的优化, 系统进程总共有五种不同的状态: 命令一:ps命令,用于查看系统中进程状态 格式:ps [参数] 查看进程与状态: ...
- XML文件操作学习(一)
受人启发,从今天开始也把学到的东西记在博客里加深印象,并且完成这个梳理过程. 最近大多数的时间都花费在做系统配置上了.大部分的配置比较复杂的都用xml文件来存储.暂时发现有以下几点需要注意的地方. 今 ...
- MimeTypes list
application/acad *.dwg AutoCAD-Dateien (nach NCSA) application/applefile AppleFile-Dateien applicati ...
- eclipse安装Gradle
第一步:下载Gradle>http://gradle.org/gradle-download 第二步:解压gradle-2.5, 配置环境变量:GRADLE_HOME path添加;%GRADL ...
- hive-0.12升级成hive 0.13.1
安装了0.12之后,听说0.13.1有许多新的特性,包括永久函数,所以想更新成0.13版的(元数据放在mysql中) 2014年8月5日实验成功 hive0.13.1的新特性 新特性详见 http:/ ...
- USACO Section 2.2: Party Lamps
这题有个小技巧, 按一个键两次等于没按,所以如果depsum > 16的话其实不用做深搜到depsum次,而只要16次就可以了. /* ID: yingzho1 LANG: C++ TASK: ...
- 《JAVA编程那点事儿》读书笔记(二)——类和对象
方法: 1. 基本的main方法: public static void main(String[] args) 2.静态方法内部调用非静态方法:重新声明一个类,通过这个类来调用非静态方法 publi ...