一、配置多数据库

大多数情况下,我们都会采用同一类型的数据库,只是为了缓解压力分成主从或分布式形式而已。声明你可以在

主配置文件

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连接多个数据库的方法的更多相关文章

  1. 详解连接SQL Server数据库的方法,并使用Statement接口实现对数据库的增删改操作

    总结一下,连接SQL Server数据库需要以下几个步骤: 1. 导入驱动Jar包:sqljdbc.jar 2. 加载并注册驱动程序 3. 设置连接路径 4. 加载并注册驱动 5. 连接数据库 6. ...

  2. 远程连接sql server 数据库的方法

    今天找了半天,终于解决了如何从本地连接到远程sql server服务器的方法. 1.首先确保打开远程服务器的sql server配置管理器,确保TCP/IP协议开启 2.WebConfig的连接字符格 ...

  3. Python基于Pymssql模块实现连接SQL Server数据库的方法

    首先,安装pymssql第三方库pip install pymssql 其次,导入pymssql库 最后们就可以连接数据库了 import pymssql server = "10.10.9 ...

  4. FireDAC 连接access MDB数据库的方法

    Use Cases Open the Microsoft Access database. DriverID=MSAcc Database=c:\mydata.mdb Open the Microso ...

  5. 【转】Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  6. Java 通过JDBC连接Mysql数据库的方法和实例

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  7. Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  8. 通过MSSQL连接服务器连接至Oracle数据库

    前言 有很多时候,我们需要MSSQL与Oracle进行跨库查询或数据交互.本篇随笔将阐述如何通过MSSQL的连接服务器连接至Oracle数据库,并且读取数据的示例. 具体步骤 首先需要到Oracle的 ...

  9. ThinkPHP连接sql server数据库

    亲身经历,在网上找连接sql server数据库的方法,还是不好找的,大多数都是照抄一个人的,而这个人的又写的不全,呵呵,先介绍一下我连接的方法吧.如果你是用THINKPHP连接,那么最重要的就是配置 ...

随机推荐

  1. CentOS系统安装JDK

    使用yum安装 1.查看yum库是否有java安装包 yum -y list java* 2.安装jdk yum -y install  java-1.8* 3.安装完成后,执行java -versi ...

  2. 错误:error libGL.so: cannot open shared object file: No such file or directory

    Failed to load libGL.soerror libGL.so: cannot open shared object file: No such file or directory 启动e ...

  3. 本博客不再更新,欢迎访问本人托管在GitHub上的博客:www.wshunli.com

    本博客不再更新. 欢迎访问本人托管在GitHub上的博客:www.wshunli.com

  4. Java基础复习之二:运算符,键盘录入,流程控制语句,if语句,三元运算

    1.运算符 1.1.算术运算符  +(加法有三个用法:加法,正号,字符串连接符)  -  *  /  %  ++  -- 1.1.1./ 是取商,%是取余 1.1.2.++ 与--的用法(a:作用是自 ...

  5. ISE MAP报错: Unsupported programming for BSCAN block and JTAG_CHAIN attribute value 1的解决方法

    2014-04-16 17:35:30 ISE MAP报错: Unsupported programming for BSCAN block and JTAG_CHAIN attribute valu ...

  6. 数组工具类 - ArrayUtil.java

    数组工具类,提供数组.对象之间转换的方法. 源码如下:(点击下载 - ArrayUtil.java .commons-lang-2.6.jar) import java.lang.reflect.Ar ...

  7. [原]Water Water Union-Find Set &amp; Min-Spanning Tree Problems&#39; Set~Orz【updating...】

    [HDU] 1213 - How Many Tables [基础并查集,求父节点个数] 1856 -More is better [基础并查集,注意内存,HDU数据水了,不用离散化,注意路径压缩的方式 ...

  8. 6.cadence原理图下[原创]

    一.平坦式原理图与分页式原理图 1 和2为平坦式原理图,平等 1和3为分页式原理图   有上下关系 ------------------------------------ 1.平坦式原理图 每张原理 ...

  9. Back to Back Order Process

    Steps involved involved in back to back order process in oracle apps 1. Enter Sales Order 2. Book Sa ...

  10. JAVA设计模式之【工厂方法模式】

    看例子 1.TV产品接口,负责播放 public interface TV // TV接口 { public void play(); } 2.TV工厂接口,负责生产产品 public interfa ...