laravel 解決多庫下的DB::transaction()事務失效問題
問題:最近使用laravel的DB::transaction()方法進行事務操作時,發(fā)現(xiàn)事務總是無效的。代碼如下:
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()使用的是默認庫的事務操作。所以要指定哪個數(shù)據(jù)庫的事務,以上代碼調整:
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)事務才正?;貪L
同樣
DB::connection('mysql_chat_room')->beginTransaction(); DB::connection('mysql_chat_room')->commit(); DB::connection('mysql_chat_room')->rollBack(); // 指定庫,不然都會跑默認配置庫的事務
以上這篇laravel 解決多庫下的DB::transaction()事務失效問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
ZendFramework框架實現(xiàn)連接兩個或多個數(shù)據(jù)庫的方法
這篇文章主要介紹了ZendFramework框架實現(xiàn)連接兩個或多個數(shù)據(jù)庫的方法,涉及ZendFramework框架配置文件與數(shù)據(jù)庫操作相關技巧,需要的朋友可以參考下2016-12-12四種php中webservice實現(xiàn)的簡單架構方法及實例
這篇文章主要介紹了四種php中webservice實現(xiàn)的簡單架構方法及實例,需要的朋友可以參考下2015-02-02thinkphp5使html5實現(xiàn)動態(tài)跳轉的例子
今天小編就為大家分享一篇thinkphp5使html5實現(xiàn)動態(tài)跳轉的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10