Yii连接多个数据库的方法
一、配置多数据库
大多数情况下,我们都会采用同一类型的数据库,只是为了缓解压力分成主从或分布式形式而已。声明你可以在
主配置文件
(
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连接多个数据库的方法的更多相关文章
- 详解连接SQL Server数据库的方法,并使用Statement接口实现对数据库的增删改操作
总结一下,连接SQL Server数据库需要以下几个步骤: 1. 导入驱动Jar包:sqljdbc.jar 2. 加载并注册驱动程序 3. 设置连接路径 4. 加载并注册驱动 5. 连接数据库 6. ...
- 远程连接sql server 数据库的方法
今天找了半天,终于解决了如何从本地连接到远程sql server服务器的方法. 1.首先确保打开远程服务器的sql server配置管理器,确保TCP/IP协议开启 2.WebConfig的连接字符格 ...
- Python基于Pymssql模块实现连接SQL Server数据库的方法
首先,安装pymssql第三方库pip install pymssql 其次,导入pymssql库 最后们就可以连接数据库了 import pymssql server = "10.10.9 ...
- FireDAC 连接access MDB数据库的方法
Use Cases Open the Microsoft Access database. DriverID=MSAcc Database=c:\mydata.mdb Open the Microso ...
- 【转】Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- Java 通过JDBC连接Mysql数据库的方法和实例
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- 通过MSSQL连接服务器连接至Oracle数据库
前言 有很多时候,我们需要MSSQL与Oracle进行跨库查询或数据交互.本篇随笔将阐述如何通过MSSQL的连接服务器连接至Oracle数据库,并且读取数据的示例. 具体步骤 首先需要到Oracle的 ...
- ThinkPHP连接sql server数据库
亲身经历,在网上找连接sql server数据库的方法,还是不好找的,大多数都是照抄一个人的,而这个人的又写的不全,呵呵,先介绍一下我连接的方法吧.如果你是用THINKPHP连接,那么最重要的就是配置 ...
随机推荐
- Zabbix简介(第一章第一节)
Alexei Vladishev创建了Zabbix项目,当前处于活跃开发状态,Zabbix SIA提供支持. Zabbix是一个企业级的.开源的.分布式的监控套件 Zabbix可以监控网络和服务的监控 ...
- 使用 Nginx 和 GeoIP 模块来处理不同国家的访问
安装 Nginx因为要用到 http_geoip_module 模块,系统自带的 nginx 一般不带这个模块,所以要下载 nginx 源代码后自行编译: # wget http://nginx.or ...
- SPRING IN ACTION 第4版笔记-第十一章Persisting data with object-relational mapping-003编写JPA-based repository( @PersistenceUnit、 @PersistenceContext、PersistenceAnnotationBeanPostProcessor)
一.注入EntityManagerFactory的方式 package com.habuma.spittr.persistence; import java.util.List; import jav ...
- Java-在线聊天系统-非线程
一.概述 1.目标:建立基于tcp协议的聊天系统 2.思路:用java socket编程 二.代码 1.ChatServer.java import java.io.DataInputStream; ...
- JVM垃圾回收机制总结(3) :按代垃圾收集器
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的 . 因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对 ...
- Android java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor ver
java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor ver 解决 ...
- activeMQ主要的几类集群部署方式
官方主从实现的文档:http://activemq.apache.org/masterslave.html 一.activeMQ主要的几类部署方式比较 1.默认的单机部署(kahadb) acti ...
- ES6入门之Generator函数
Generator Generator函数是ES6提供的一种异步编程解决方案,Generator函数是一个状态机,封装了多个内部状态. 执行Generator函数会返回一个遍历器对象,也就是说,Gen ...
- opencv 金字塔图像分割
我所知的opencv中分割函数:watershed(只是看看效果,不能返回每类pixel类属),cvsegmentImage,cvPyrSegmentation(返回pixel类属) 金字塔分割原理篇 ...
- Getting Started with Mongoose and Node.js – A Sample Comments System | Dev Notes
In this post, we’re going to be creating a sample comments system using Node, Express and Mongoose. ...