問題:最近使用laravel的DB::transaction()方法進(jìn)行事務(wù)操作時(shí),發(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 第二句會報(bào)錯(cuò)拋出一個(gè)異常, 查看數(shù)據(jù)庫時(shí)第一句依然出入成功。查看laravel的DB::transaction()的使用
原因以及解決方法:
項(xiàng)目使用多個(gè)數(shù)據(jù)庫配置,DB::transaction()使用的是默認(rèn)庫的事務(wù)操作。所以要指定哪個(gè)數(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ù)才正常回滾
同樣
DB::connection('mysql_chat_room')->beginTransaction();
DB::connection('mysql_chat_room')->commit();
DB::connection('mysql_chat_room')->rollBack(); // 指定庫,不然都會跑默認(rèn)配置庫的事務(wù)
以上這篇laravel 解決多庫下的DB::transaction()事務(wù)失效問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- laravel5 Eloquent 實(shí)現(xiàn)事務(wù)方式
- 在laravel中實(shí)現(xiàn)事務(wù)回滾的方法
- laravel Model 執(zhí)行事務(wù)的實(shí)現(xiàn)