一、配置多数据库

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

主配置文件

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. 利用反射完成初级万能DAO

    一.目标 利用反射完成初级万能DAO 二.注意 1.Field[] fi = clazz.getDeclaredFields(); for(Field ff : fi){ ff.setAccessib ...

  2. JLink v8克隆版破解向导(此方法仅适用XP32位版 WIN7及以上和64位均不支持 建议使用虚拟机)

    此方法仅适用XP32位版 WIN7及以上和64位均不支持 建议使用虚拟机 摘要 Jlink 4.5版本之后驱动会识别老的克隆版的JlinkV8,Jlink软件在启动时会提示为克隆版本后退出.目前主流的 ...

  3. Linux服务器沦陷为肉鸡的全过程实录

    1 从防火墙瘫痪说起 2015年3月10日,还没到公司就被电话告知办公室无法正常连接互联网了,网速非常慢,无法正常浏览网页.急急忙忙感到公司,开始查找问题. 首先排除了交换机故障,因为内部局域网正常. ...

  4. Linux系统文件权限&目录权限

    linux系统一切都是文件,文件和目录的所属与权限--来分别规定所有者.所有组.其余人的读.写.执行权限. 读(read),写(write),执行(excute)简写为(r.w.x),也可以以用(4. ...

  5. ES6入门之函数的扩展

    函数js原有的: 属性:arguments[].caller(调用该函数的引用,注意与callee分别开,callee指的是调用函数本身经常在递归中出现).length(形参个数).prototype ...

  6. zabbix接口调用注意事项--Python

    不知道该怎么写,但是明显得写点什么,担心时间长了,忘记,再回顾时又要重新摸索一遍 一.Request:post params: 1. 第一层的参数处理: 第一层的参数设置为变量 2. 其他层参数格式不 ...

  7. bootrom启动流程【转】

    转自:http://blog.csdn.net/blueoceanindream/article/details/6851787 闲来无事,总结一下linux bootrom的启动流程: 环境:MIP ...

  8. git checkout not discard changes

    1. checkout one branch, show status user@vbox:/mnt/tmp$ git checkout masterSwitched to branch 'maste ...

  9. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  10. GMT与UTC

    时间概念 — 24时区.GMT.UTC的意涵 许多人都知道两地时间表简称为GMT或UTC,而世界时区表则通称为World Time ,那么GMT与UTC的实质原意又是为何?世界时区又是怎么区分的?面盘 ...