在yii1的时候,主从数据库的支持没有那么方便,只能写上多个DB的components,然后在AR的getDB中返回相应的db。这样也可以用来对付主从数据库
Yii2则已经解决这个问题,直接在代码中进行处理即可:
PHP代码
- 'db' =>[
- 'class' => 'yii\db\Connection',
- // 配置主服务器
- 'dsn' => 'dsn for master server',
- 'username' => 'master',
- 'password' => '',
- 'charset' => 'utf8',
- 'tablePrefix' => 'php_',//默认为空
- // 配置从服务器
- 'slaveConfig' => [
- 'username' => 'slave',
- 'password' => '',
- 'charset' => 'utf8',
- 'tablePrefix' => 'php_',
- 'attributes' => [
- // use a smaller connection timeout
- PDO::ATTR_TIMEOUT => 10,
- ],
- ],
- ];
是不是感觉超级方便,而不止是这样,你还可以配置从服务器组:
PHP代码
- 'db'=>[
- //...上面是一些标准配置
- 'slaves' => [
- ['dsn' => 'dsn for slave server 1'],
- ['dsn' => 'dsn for slave server 2'],
- ['dsn' => 'dsn for slave server 3'],
- ['dsn' => 'dsn for slave server 4'],
- ],
- ]
更值得称赞的是,主服务器也是多个主服务器的配置就是下面这样,其中字符编码集,表前缀等设置参考上面的。
PHP代码
- 'db'=>[
- // 配置主服务器
- 'masterConfig' => [
- 'username' => 'master',
- 'password' => '',
- 'attributes' => [
- // use a smaller connection timeout
- PDO::ATTR_TIMEOUT => 10,
- ],
- ],
- // 配置主服务器组
- 'masters' => [
- ['dsn' => 'dsn for master server 1'],
- ['dsn' => 'dsn for master server 2'],
- ],
- //other ...slaves
- ];
果然 是轻轻松松啊。
当然 如果你想更轻松的使用,这些,其实就是得用YII2的AR。你就用不着改代码了。。