【注意】最后更新于 December 10, 2019,文中内容可能已过时,请谨慎使用。
在项目中经常会碰到多个数据库的情况,在 yii 中也是可以快速设置的
演示的版本是 basic 版,但是原理很好理解
编辑配置文件 @app/config/web.php
1
2
3
4
|
......
'db' => require(__DIR__ . '/db.php'), //框架提供的一个默认连接
'localDb' => require(__DIR__ . '/db2.php'), //这个是我们新加的一个连接配置
......
|
在同目录下的 db2.php
内容格式和 db.php
格式一样,只是连接不同
修改 model 中需要使用的 connection id
这时再在想改的 model 中复写 getDb()
方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Members extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'members';
}
/**
* @return \yii\db\Connection the database connection used by this AR class.
*/
public static function getDb()
{
return Yii::$app->get('localDb');
}
......some functions.................
}
|
这个 model 中我们使用了 localDb
的链接配置,可以追踪代码 \yii\db\ActiveRecord
中的 getDb()
方法,
1
2
3
4
5
6
7
8
9
10
11
12
|
//in \yii\db\ActiveRecord
/**
* Returns the database connection used by this AR class.
* By default, the "db" application component is used as the database connection.
* You may override this method if you want to use a different database connection.
* @return Connection the database connection used by this AR class.
*/
public static function getDb()
{
return Yii::$app->getDb();
}
|
有这么一段,既然已经显示出来 Yii::$app
这种核心的东西了,说明已经离那个connection
容器已经不远了
再追踪到getDb()
显示的是 $this->get('db')
转换一下不就是默认使用的 Yii::$app->get('db')
吗? 于是回到最开始的 model 中,将其重写为 Yii::$app->get('localDb')
,之后我们再使用这个 model 的时候就是使用的id 为localDb
的 connection 单例了
文章作者
GPF
上次更新
2019-12-10
(77997d9)