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连接,那么最重要的就是配置 ...
随机推荐
- JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-002Table per concrete class with implicit polymorphism(@MappedSuperclass、@AttributeOverride)
一.结构 二.代码 1. package org.jpwh.model.inheritance.mappedsuperclass; import javax.persistence.MappedSup ...
- jd-gui 反编译后去除注释
默认情况下,使用jd-gui反编译时会有注释. 行号注释 /* 521:502 */ 元信息 /* Location: D:\core-1.0.0.jar * Qualified ...
- Intellij Idea 15 生成serialVersionUID的方法
默认情况下Intellij IDEA是关闭了继承了Serializable接口的类生成serialVersionUID的警告.如果需要ide提示生成serialVersionUID,那么需要做以下设置 ...
- 每个PHP开发者都应该看的书
PHP这几年口碑很差.关于它的“糟糕设计的汇总”和语法上的矛盾有着大量的讨论,但是主要的抱怨通常是安全.很多PHP站点分分钟被黑掉,甚至一些有经验的.有见识的程序员会说,这门语言本身是不安全的. 我总 ...
- RPC简介及原理
简介 RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用). 越底层, ...
- nandflash学习1——导致nandflash反转的原因【转】
转自:http://blog.csdn.net/gaosentao/article/details/7711311 Bit Flip/Bit Flipping/Bit-Flip/Bit twiddli ...
- 《Linux/Unix系统编程手册》读书笔记5
<Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...
- 运行javascript的方式
1.放在超链接中: <a href="javascript:alert('aaaa')" >Test</a> 2.直接加载 <script type= ...
- php注册登录系统(一)-极简
序 登录注册系统是日常上网最普通的操作,我设了一个分类一步步完善注册登录系统,若有哪里错误请慧教 所用语言:php 数据库 :mysql 本次实现功能: 1.用户注册 2.用户登录 主要文件: 完整代 ...
- C#图片压缩的实现方法
一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的.尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图. 一般在web应用中 ...