mingyuanyun/yii2-idb

Database read-write splitting for saas mode based on Yii framework

v1.1.210522 2021-07-21 10:03 UTC

This package is auto-updated.

Last update: 2021-09-21 10:50:23 UTC


README

yii2自定义组件,实现基于saas租户代码的读写分离组件,支持显式和隐式读写用法

安装

1 安装最新发布版本 composer require mingyuanyun/yii2-idb
2 安装指定发布版本 composer require mingyuanyun/yii2-idb:版本号

更新版本 修改composer.json文件,调整版本依赖如:"mingyuanyun/yii2-idb": "~1.0"表示允许大于等于1.0小于2.0的发布版本, 再执行

composer update mingyuanyun/yii2-idb

使用

修改web配置

增加iDb组件
    'components' => [
        'iDb' => [
            'class' => 'iDb\Connection',
            'configProviderClass' => 'iDb\providers\YfwDbConfigProvider',
            'enableSlaves' => false
        ],
    ]

其中configProviderClass是数据库读取类,实现接口iDb\interfaces\DbConfigProviderInterface,用户提供自定义的租户读取方法
注意:目前云服务和工程协同的租户数据库读取类已经内置,如果需要调整可以联系组件提供方进行调整,另外云服务使用该组件时需要在rds表中补全rds.idb_readonly_host字段标识从库的数据库主机地址。

代码中使用

显示调用:指明是操作主库还是从库

// 获取主库连接:
 \Yii::$app->iDb->getMasterDb('租户code');

// 获取从库连接,如果该组件的enableSlaves为false则返回主库,否则返回从库
\Yii::$app->iDb->getSlaveDb('租户code');

隐式调用:组件内部根据最终执行的是query还是execute来调用主从

// 获取Yii默认的数据库连接:
// 如果该组件的enableSlaves为false则数据库语句会在主库上执行,否则根据读写操作进行主从分配
\Yii::$app->iDb->getDb('租户code')
\Yii::$app->iDb->getAppDb('租户code', '产品Code')

新增产品级别的数据库配置(产品级隔离)

增加iDb组件
    'components' => [
        'iDb' => [
            'class' => 'iDb\AppConnection',
            'configProviderClass' => 'YfSdk\common\db\idb\providers\YfwAppDbConfigProvider',
            'enableSlaves' => true
        ],
    ]

代码中使用(产品级隔离)

显示调用:指明是操作主库还是从库

// 获取主库连接:
 \Yii::$app->iDb->getAppMasterDb('租户code', '产品Code');

// 获取从库连接,如果该组件的enableSlaves为false则返回主库,否则返回从库
\Yii::$app->iDb->getAppSlaveDb('租户code', '产品Code');