1. 程式人生 > >ThinkPHP5中的事務操作

ThinkPHP5中的事務操作

官方手冊裡的事務操作
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(); }

需要注意的幾個方面是

  1. 使用事務處理的話,需要資料庫引擎支援事務處理。 比如 MySQL 的MyISAM 不支援事務處理,需要使用InnoDB 引擎
  2. 注意在事務操作的時候,確保你的資料庫連線是相同的
  3. 業務上的出錯和資料庫操作的出錯是不同的,你可能需要自己捕獲業務上的出錯資訊