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连接,那么最重要的就是配置 ...
随机推荐
- CentOS系统配置solr
1.新建一个文件夹 比如soft cd /soft wget http://apache.fayea.com/lucene/solr/6.0.0/solr-6.0.0-src.tgz --下 ...
- 什么是边界扫描(boundary scan)?
边界扫描(Boundary scan )是一项测试技术,是在传统的在线测试不在适应大规模,高集成电路测试的情况下而提出的,就是在IC设计的过程中在IC的内部逻辑和每个器件引脚间放置移位寄存器(shif ...
- 关于LINUX权限-bash: ./startup.sh: Permission denied
关于LINUX权限-bash: ./startup.sh: Permission denied <script type="text/javascript"></ ...
- swift:Optional Type 、Swift和Objective-C混编的讲解
❤️❤️❤️swift中的Optional Type的?和!含义:其实就是一个装包和拆包的过程 optional的含义: Optional事实上是一个枚举类型,Optional包含None和Some两 ...
- logstash_agent.conf 语法注意事项
编写配置文件时要注意语法,如新版本的logstash对参数host变更为hosts,去除了port参数等. [root@localhost logstash]# cat logstash_agent. ...
- Hadoop管理员的十个最佳实践
前言 接触Hadoop有两年的时间了,期间遇到很多的问题,既有经典的NameNode和JobTracker内存溢出故障,也有HDFS存储小文件问题,既有任务调度问题,也有MapReduce性能问题.遇 ...
- sql语句的基本操作
建立一个数据库 create DATABASE mydatabase; 建立一张数据表: ##创建一个员工表##create table employee( eid int not NULL PRIM ...
- !! Android developer 最新国内镜像
Android developer 最新国内镜像: http://wear.techbrood.com, 包含Android最新文档以及Android Wear,Android TV,Android ...
- android 从服务器上获取APK下载安装
简单的为新手做个分享. 网上有些资料,不过都是很零散,或是很乱的,有的人说看不懂. 一直有新手说 做到服务器更新APK时没有思路,这里做个简单的分享,希望有不同思路的可以讨论. 下面做个很简单的读 ...
- IMP导入数据 报错 IMP-00058 ORA-01691 IMP-00028
查看导入日志,发现错误如下: oracle@sspt:/back/log> cat imp.HD_HDXX.log Connected to: Oracle Database 11g Enter ...