問題:最近使用laravel的DB::transaction()方法進行事務(wù)操作時,發(fā)現(xiàn)事務(wù)總是無效的。代碼如下:
DB::transaction(function () use ($uid, $roleId) {
RoomUserRole::insert([
'uid' => $uid,
'role_id' => $roleId,
'created_at' => LARAVEL_START,
'updated_at' => LARAVEL_START
]);
RoomUserRoleLog::insert([
'uid' => $uid,
'handle_type' => 1,
'admin_uid' => Auth::user()->id,
'created_at' => LARAVEL_START,
'updated_at' => LARAVEL_START
]);
});
以上mysql 第二句會報錯拋出一個異常, 查看數(shù)據(jù)庫時第一句依然出入成功。查看laravel的DB::transaction()的使用
原因以及解決方法:
項目使用多個數(shù)據(jù)庫配置,DB::transaction()使用的是默認庫的事務(wù)操作。所以要指定哪個數(shù)據(jù)庫的事務(wù),以上代碼調(diào)整:
DB::connection('mysql2')->transaction(function () use ($uid, $roleId) {
RoomUserRole::insert([
'uid' => $uid,
'role_id' => $roleId,
'created_at' => LARAVEL_START,
'updated_at' => LARAVEL_START
]);
RoomUserRoleLog::insert([
'uid' => $uid,
'handle_type' => 1,
'admin_uid' => Auth::user()->id,
'created_at' => LARAVEL_START,
'updated_at' => LARAVEL_START
]);
}); // 這樣你會發(fā)現(xiàn)事務(wù)才正?;貪L
同樣
DB::connection('mysql_chat_room')->beginTransaction();
DB::connection('mysql_chat_room')->commit();
DB::connection('mysql_chat_room')->rollBack(); // 指定庫,不然都會跑默認配置庫的事務(wù)
以上這篇laravel 解決多庫下的DB::transaction()事務(wù)失效問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- laravel5 Eloquent 實現(xiàn)事務(wù)方式
- 在laravel中實現(xiàn)事務(wù)回滾的方法
- laravel Model 執(zhí)行事務(wù)的實現(xiàn)