https://blog.csdn.net/qq_42176520/article/details/88708395
使用事務處理的話,需要數據庫引擎支持事務處理。比如
MySQL的MyISAM不支持事務處理,需要使用InnoDB引擎。
最簡單的方式是使用 transaction 方法操作數據庫事務,當閉包中的代碼發生異常會自動回滾,例如:
-
Db::transaction(function () {
-
Db::table('think_user')->find(1);
-
Db::table('think_user')->delete(1);
-
});
也可以手動控制事務,例如:
-
// 啟動事務
-
Db::startTrans();
-
try {
-
Db::table( 'think_user')->find(1);
-
Db::table( 'think_user')->delete(1);
-
// 提交事務
-
Db::commit();
-
} catch (\Exception $e) {
-
// 回滾事務
-
Db::rollback();
-
}
注意在事務操作的時候,確保你的數據庫連接使用的是同一個。
V5.1.13+版本開始,可以支持MySQL的XA事務用於實現全局(分布式)事務,你可以使用:
-
Db::transactionXa(function () {
-
Db::connect('db1')->table('think_user')->delete(1);
-
Db::connect('db2')->table('think_user')->delete(1);
-
}, [Db::connect('db1'),Db::connect('db2')]);
要確保你的數據表引擎為
InnoDB,並且開啟XA事務支持。
