yii2 多数据库 事务 跨数据库事务

1.配置:组件配置,db是默认的数据库库连接

[html]  view plain  copy
  1. 'components' => [  
  2.        'db' => [  
  3.            'class' => 'yii\db\Connection',  
  4.            'dsn' => 'mysql:host=localhost;dbname=erp',  
  5.            'username' => 'root',  
  6.            'password' => 'onfancy',  
  7.            'charset' => 'utf8',  
  8.         //'tablePrefix' => 'tbl_',   数据表前缀  
  9.        ],  
  10.       
  11.       
  12.     'ebayDb' => [  
  13.            'class' => 'yii\db\Connection',  
  14.            'dsn' => 'mysql:host=localhost;dbname=erp_ebay',  
  15.            'username' => 'root',  
  16.            'password' => 'onfancy',  
  17.            'charset' => 'utf8',   
  18.        ],  

配置完成后,创建数据库  erp  erp_ebay

然后创建表:

erp.test

erp_ebay.test


2.创建activeRecord 


[html]  view plain  copy
  1. namespace myapp\code\core\Erp\Sales\models;  
  2. use yii\db\ActiveRecord;  
  3.   
  4. class Erptest extends ActiveRecord  
  5. {  
  6.     public static function tableName()  
  7.         {  
  8.           return 'test';  
  9.        }  
  10. }  
上面的代码,getDb默认使用db的配置

[html]  view plain  copy
  1. php  
  2.   
  3. namespace myapp\code\core\Erp\Sales\models;  
  4. use yii\db\ActiveRecord;  
  5.   
  6. class Ebaytest extends ActiveRecord  
  7. {  
  8.     public static function getDb()  
  9.     {  
  10.         return \Yii::$app->ebayDb;  // use the "db2" application component  
  11.     }  
  12.       
  13.     public static function tableName()  
  14.     {  
  15.         return 'test';  
  16.     }  
  17. }  
上面的代码:通过getDb获取上面配置的ebayDb的配置


然后就可以使用使用了


[html]  view plain  copy
  1. $innerTransaction = Yii::$app->db->beginTransaction();  
  2.         try {  
  3.               
  4.             $erp_test = new Erptest();  
  5.             $erp_test->class = 99;  
  6.             $erp_test->age = 99;  
  7.             $erp_test->live = 99;  
  8.             $erp_test->save();  
  9.               
  10.             $Ebaytest = new Ebaytest();  
  11.             $Ebaytest->age = 88;  
  12.             $Ebaytest->name = 88;  
  13.             $Ebaytest->live = 99;  
  14.             $Ebaytest->save();  
  15.               
  16.               
  17.               
  18.             $data = Ebaytest::find()->asArray()->all();  
  19.             foreach($data as $d){  
  20.                 var_dump($d);  
  21.             }  
  22.               
  23.               
  24.             $data = Erptest::find()->asArray()->all();  
  25.             foreach($data as $d){  
  26.                 var_dump($d);  
  27.             }  
  28.               
  29.               
  30.           
  31.             $innerTransaction->commit();  
  32.         } catch (Exception $e) {  
  33.             $innerTransaction->rollBack();  
  34.         }  


当第二条插入执行失败,mysql会回滚!

你可能感兴趣的:(php,yii2)