yg
ActiveRecord有个getDb方法,你可以重写他
public static function getDb() { return Yii::$app->getDb(); }
其他它最终调用的是Application的getDb方法
public function getDb() { return $this->get('db'); }
所以,你可以根据你自己的业务,然后重写这个方法,返回你想要的db。
最好自己写个类,比如:class BackBaseActiveRecord extends ActiveRecord{ }
然后让你所有的model都继承BackBaseActiveRecord,这样你在BackBaseActiveRecord中重写getDb方法
你试试看行不行
@javalzbin 在我自己这个类BackBaseActiveRecord 里面怎么去区分请求过来的是写操作 还是读操作呢 我要在这个类里面去区分读操作让他执行从库 写操作执行主库
- yg 评论了教程 Yii1.1 多库配置及运用
这样能把所有的读写操作分离吗? 写主库 读从库?
ActiveRecord有个getDb方法,你可以重写他
public static function getDb() { return Yii::$app->getDb(); }
其他它最终调用的是Application的getDb方法
public function getDb() { return $this->get('db'); }
所以,你可以根据你自己的业务,然后重写这个方法,返回你想要的db。
最好自己写个类,比如:class BackBaseActiveRecord extends ActiveRecord{ }
然后让你所有的model都继承BackBaseActiveRecord,这样你在BackBaseActiveRecord中重写getDb方法
你试试看行不行
我用的是yii1.1版本 我先按照您这个方法试试
首先,你得配置多个db
return [ // ... 'components' => [ // 配置主库 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=mydatabase', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], //可以配置多个从库,只要负责读 'dbread' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=mydatabase2', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], ], // ... ];
接下来,如果你的业务处理是读取的,你就获取读取的实例:
$connection2 = \Yii::$app->dbread;
如果是需要写的业务,你就获取可读写的实例
$connection2 = \Yii::$app->db;
我明白您的思路 关键是我项目里 基本都用的是AR操作的数据库列如: Member::model()->findByPk($id); 这样的操作怎么去区分呢?
- yg 提出了问题多个数据库 读写分离怎么配置呢?
- yg 回复了话题 离线数据库和主数据库的同步
多个数据库 读写分离怎么配置呢?
- yg 评论了教程 数据库模型及SQL语句执行增删改查
多个数据库 读写分离怎么配置呢?
- yg 评论了教程 数据库的增删改查操作
多个数据库 读写分离怎么配置呢?
我记得是直接用config来实现的,不需要在AR层做修改。
我在配置文件里配的 但是不起作用,并且程序访问不到数据库了
'db'=>array( 'class'=>'DbConnectionMan',//Specify it,instead of CDbConnection,other options is same as CDbConnection 'connectionString' => 'mysql:host=192.168.207.132:3306;dbname=eyisheng', 'emulatePrepare' => true, 'username' => 'root', 'password' => '123456', 'charset' => 'utf8', 'tablePrefix' => 'dv_', 'enableSlave'=>true,//Read write splitting function is swithable.You can specify this value to false to disable it. 'slaves'=>array(//slave connection config is same as CDbConnection array( 'connectionString'=>'mysql:host=192.168.207.133:3306;dbname=eyisheng', 'username'=>'root', 'password'=>'123456', 'tablePrefix' => 'dv_', ) ), ),