Yii 读写分离 分表分库

本文转自  http://hudeyong926.iteye.com/blog/1299989 

实现一主一从,一主多从,多主多从的读写分离 。支持DAO,AR,其中Query builder只完成部分,需完善

调用

Java代码  收藏代码
  1. //AR  
  2. class User extends ActiveRecord  
  3. {  
  4.     public $useDbName= 'passport';  
  5.     //$this->dbWrite();  
  6. }  
  7. //$connection = $model->getDbConnection();  
  8. //DAO  
  9. $connection = Yii::app()->db->setDbName('passport');  
  10. $count = $connection->createCommand('SELECT COUNT(*) FROM film')->queryScalar();  
  11. $sql = 'SELECT film_id,title FROM film';  
  12. $dataProvider=new CSqlDataProvider($sql,array(  
  13.     'db'=> $connection,  
  14.     'totalItemCount'=>$count,  
  15. ));  
  16. Yii::app()->db->getLastInsertID();  
  17.   
  18. //Query Builder  
  19. $user = Yii::app()->db->setDbName('passport')->createCommand()  
  20.     ->select('id, username, profile')  
  21.     ->from('tbl_user u')  
  22.     ->join('tbl_profile p', 'u.id=p.user_id')  
  23.     ->where('id=:id', array(':id'=>$id))  
  24.     ->queryRow();  

 查看当前使用的主从库配置

Java代码  收藏代码
  1. Yii::app()->db->setDbName('passport');  
  2. //print_r(Yii::app()->getComponent('passport'));  

 分表AR

Java代码  收藏代码
  1. public function primaryKey()  
  2. {  
  3.     return 'id';  
  4. }  
  5. private $tableName = "servicesmsremindrecord";  
  6. public function updateMeta($code)  
  7. {  
  8.     $this->tableName = "service_sms_remind_record_".str_pad(($code%100), 2, '0', STR_PAD_LEFT);  
  9.     $this->refreshMetaData();  
  10.     return $this;  
  11. }  
  12. //TestUserDayHealth::model($code)->with('user')->findAll(); 循环放数组
原文地址:https://www.cnblogs.com/DaBing0806/p/4704509.html