ThinkPHP5中的事務操作
阿新 • • 發佈:2019-02-05
官方手冊裡的事務操作
1.自動控制事務處理(匿名函式方式)
Db::transaction(function(){
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
});
2.手動控制事務
// 啟動事務
Db::startTrans();
try{
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
// 提交事務
Db::commit();
} catch (\Exception $e) {
// 回滾事務
Db::rollback();
}
除了官方推薦方式,我們也可以另外使用模型來控制事務
$test1Model=new Test1Model;
$test2Model=new Test2Model;
$test1Model->startTrans();
try{
$test1Model->where('id','eq',1)->delete();
$test2Model->where('id','eq',1)->delete();
$test1Model->commit();
}catch (\Exception $e){
$test1Model->rollback();
}
需要注意的幾個方面是
- 使用事務處理的話,需要資料庫引擎支援事務處理。 比如 MySQL 的MyISAM 不支援事務處理,需要使用InnoDB 引擎
- 注意在事務操作的時候,確保你的資料庫連線是相同的
- 業務上的出錯和資料庫操作的出錯是不同的,你可能需要自己捕獲業務上的出錯資訊