一、配置多数据库

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

主配置文件

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. iOS开发--即时通讯常用第三方库

    前言 自毕业到现在,从事iOS即时通讯开发已经1年半之久.主要负责Allure开发,目前已上架,可以在苹果商店搜素Allure.Allure模仿微信的交互和设计效果,已经实现微信的大部分功能. 在这里 ...

  2. Java学习笔记之:Java 定时任务

    一.介绍 在应用里经常都有用到在后台跑定时任务的需求.比如网络运营商会在每个月的一号对数据进行一次统计.在java中我们可以继承timertask类来实现定时任务. 二.笔记 /** * 定时任务 * ...

  3. STM32F05x加入RDP(LV1)后,Segger无法Unlock的解决办法

    沿用之前CM3核的STM32F10X系列的加入RDP功能,之后在Segger的Unsecured Chip或者Unlock STM32的Cmd无法进行去除RDP,而Unlock STM32则提示无法识 ...

  4. YII2 RBAC Admin User权限相关

    https://github.com/mdmsoft/yii2-admin/blob/master/docs/guide/configuration.md http://www.liuhaihua.c ...

  5. Awstats分析Nginx日志

    1.nginx日志格式设定 log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$ ...

  6. JBOSS集群技术升级版解决方案分享(图示篇)

    JBOSS集群技术升级版解决方案分享(实现篇)           前段时间,由于阿堂一直较忙,没有写点什么了,有空时一直在关注"web架构和性能,高并发,Cache层"技术领域的 ...

  7. Django自定义模型(model)中的字段标签

    方法一: 在编辑页面中,每个字段的标签都是从模块的字段名称生成的. 规则很简单: 用空格替换下划线:首字母大写.例如:Book模块中publication_date的标签是Publication da ...

  8. 第五篇 Getting Started with ORACLE EBS(开始学习ORACLE EBS)

    第一篇介绍了ERP软件是供应链管理软件.告诉你这个软件改善或提升企业管理的切入点和着力点.有了着力点才能给力. 第二篇介绍了什么是咨询以及咨询工作共通的章法,告诉了你咨询的套路是什么,就像练习一套拳, ...

  9. python webdriver测试报告

    python webdriver测试报告 即将开始一系列的自动化项目实践,很多公共类和属性都需要提前搞定.今天,解决了测试报告的一些难题,参照了很多博文,最终觉得HTMLTestRunner非常不错, ...

  10. 浅谈Websocket、Ajax轮询和长连接(long pull)

    最近看到了一些介绍Websocket的文章,觉得挺有用,所以在这里将自己的对其三者的理解记录一下. 1.什么是Websocket Websocket是HTML5中提出的新的协议,注意,这里是协议,可以 ...