一、配置多数据库

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

主配置文件

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. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-002Table per concrete class with implicit polymorphism(@MappedSuperclass、@AttributeOverride)

    一.结构 二.代码 1. package org.jpwh.model.inheritance.mappedsuperclass; import javax.persistence.MappedSup ...

  2. jd-gui 反编译后去除注释

    默认情况下,使用jd-gui反编译时会有注释. 行号注释 /* 521:502 */ 元信息 /* Location:           D:\core-1.0.0.jar * Qualified ...

  3. Intellij Idea 15 生成serialVersionUID的方法

    默认情况下Intellij IDEA是关闭了继承了Serializable接口的类生成serialVersionUID的警告.如果需要ide提示生成serialVersionUID,那么需要做以下设置 ...

  4. 每个PHP开发者都应该看的书

    PHP这几年口碑很差.关于它的“糟糕设计的汇总”和语法上的矛盾有着大量的讨论,但是主要的抱怨通常是安全.很多PHP站点分分钟被黑掉,甚至一些有经验的.有见识的程序员会说,这门语言本身是不安全的. 我总 ...

  5. RPC简介及原理

    简介 RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用). 越底层, ...

  6. nandflash学习1——导致nandflash反转的原因【转】

    转自:http://blog.csdn.net/gaosentao/article/details/7711311 Bit Flip/Bit Flipping/Bit-Flip/Bit twiddli ...

  7. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  8. 运行javascript的方式

    1.放在超链接中: <a href="javascript:alert('aaaa')" >Test</a> 2.直接加载 <script type= ...

  9. php注册登录系统(一)-极简

    序 登录注册系统是日常上网最普通的操作,我设了一个分类一步步完善注册登录系统,若有哪里错误请慧教 所用语言:php 数据库 :mysql 本次实现功能: 1.用户注册 2.用户登录 主要文件: 完整代 ...

  10. C#图片压缩的实现方法

    一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的.尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图. 一般在web应用中 ...