一、配置多数据库

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

主配置文件

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. APM (应用性能管理)

    在信息科学和系统控制领域,APM是用来监控和管理应用软件是否有效运行的.APM通过监测和分析应用的表现去保证软件应用的良好运行,APM已经商用. 基本定义 APM = Application Perf ...

  2. ios开发--苹果企业开发者账号

    苹果企业开发者账号添加多个开发成(组)员的方法 如果你们公司有一个帐号,你是管理员,加入组员的办法如下: 第一步:进入Member Center页 第二步:点击people,会见到 第三步:点击Inv ...

  3. linux下python启动第三方程序,并控制关闭

    import subprocess import os import signal p = subprocess.Popen("recordmydesktop -o /home/test/t ...

  4. Linux系统监视资源与进程管理

    Linux 系统中时刻运行着许多的进程,如果能够合理的管理它们,有益于系统性能的优化, 系统进程总共有五种不同的状态: 命令一:ps命令,用于查看系统中进程状态 格式:ps [参数] 查看进程与状态: ...

  5. XML文件操作学习(一)

    受人启发,从今天开始也把学到的东西记在博客里加深印象,并且完成这个梳理过程. 最近大多数的时间都花费在做系统配置上了.大部分的配置比较复杂的都用xml文件来存储.暂时发现有以下几点需要注意的地方. 今 ...

  6. MimeTypes list

    application/acad *.dwg AutoCAD-Dateien (nach NCSA) application/applefile AppleFile-Dateien applicati ...

  7. eclipse安装Gradle

    第一步:下载Gradle>http://gradle.org/gradle-download 第二步:解压gradle-2.5, 配置环境变量:GRADLE_HOME path添加;%GRADL ...

  8. hive-0.12升级成hive 0.13.1

    安装了0.12之后,听说0.13.1有许多新的特性,包括永久函数,所以想更新成0.13版的(元数据放在mysql中) 2014年8月5日实验成功 hive0.13.1的新特性 新特性详见 http:/ ...

  9. USACO Section 2.2: Party Lamps

    这题有个小技巧, 按一个键两次等于没按,所以如果depsum > 16的话其实不用做深搜到depsum次,而只要16次就可以了. /* ID: yingzho1 LANG: C++ TASK: ...

  10. 《JAVA编程那点事儿》读书笔记(二)——类和对象

    方法: 1. 基本的main方法: public static void main(String[] args) 2.静态方法内部调用非静态方法:重新声明一个类,通过这个类来调用非静态方法 publi ...