Yii連線多個資料庫的方法
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裡extendSub1ActiveRecord 而不是 CActiveRecord 。
這裡我們是通過擴充套件Yii通用類來定義一個新的類,而不是在每個模型裡面都過載 getDbConnection 方法,這樣做的好處是更大程度上的程式碼重用,節省時間。
過載程式碼如下:
// protected/components/MyActiveRecord.php
class
Sub1ActiveRecord extends CActiveRecord{
public function getDbConnection()
{
if(self::$db!==null)
returnself::$db;
else
{
//這裡就是我們要修改的
self::$db=Yii::app()->getComponent(`db1`);
//self::$db=Yii::app()->db1;
if(self::$db instanceofCDbConnection)
return self::$db;
else
throw new CDbException(Yii::t(`yii`,`Active
Record requires a “db1” CDbConnectionapplication component.`));
}
}
………..
}
三,在模型中使用
經過以上兩步以後,我們就可以這樣來用:
1 |
// protected/models/Ad.php |
相關文章
- Laravel 使用多個資料庫連線Laravel資料庫
- 2.6 Laravel配置多個資料庫連線Laravel資料庫
- 多連線資料庫DBeaverUltimate中文資料庫
- PHP中的資料庫連線方法PHP資料庫
- sqlplus連線資料庫的幾種方法SQL資料庫
- 【PG資料庫】PG資料庫的安裝及連線方法資料庫
- DBeaver如何連線一個資料庫資料庫
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- Oracle RMAN 連線資料庫認證方法Oracle資料庫
- JDBC連線MySQL資料庫的方法和例項JDBCMySql資料庫
- 連線資料庫資料庫
- 資料庫的連線數資料庫
- 資料庫連線 系列一:laravel框架如何連線兩個資料庫(不同伺服器)資料庫Laravel框架伺服器
- Mysql:canal-adapter:如何設定多個 src 源資料庫連線?!MySqlAPT資料庫
- 教你如何無程式碼整合連線多個不同型別資料庫型別資料庫
- golang連線達夢資料庫的一個坑Golang資料庫
- iis連線資料庫的檔案是哪個資料庫
- MySQL資料庫遠端連線開啟方法MySql資料庫
- 資料庫連線錯誤的原因及解決方法資料庫
- 資料庫連線失敗的原因及解決方法資料庫
- C# 連線多種資料庫元件,類庫專案C#資料庫元件
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 多連線的資料庫管理工具Navicat Premium 16.1.5資料庫REM
- python中多程式處理資料庫連線的問題Python資料庫
- mysqli連線資料庫MySql資料庫
- Mongodb資料庫連線MongoDB資料庫
- Android 連線資料庫Android資料庫
- java連線資料庫Java資料庫
- 連線資料庫-mysql資料庫MySql
- jmeter連線資料庫JMeter資料庫
- Mybatis連線資料庫MyBatis資料庫
- JSP連線資料庫JS資料庫
- JDBC連線資料庫JDBC資料庫
- Flask連線資料庫Flask資料庫
- 資料庫與python的連線資料庫Python
- 資料庫的連線過程資料庫
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫
- django2.2版本連線mysql資料庫的方法DjangoMySql資料庫