2016-05-04 19 views
2

我們沿着就好在Laravel 5.1得到一些雄辯代碼:Laravel 5.2升級將導致SQL鎖定錯誤,不尊重數據庫事務

DB::transaction(function() { 

    // Eloquent model saved here 
    $bla = new Bla(); 
    $bla->blabla = 'bla'; 
    $bla->save() 

}); 

律協洋洋灑灑模型有一個模型觀察者類檢查創建,更新和刪除,然後寫入日誌表。在Laravel 5.1這個工作得十分完美,但在升級到5.2後,似乎忘了這是在一個事務,因爲它實際上試圖寫日誌表引發此錯誤:

General error: 1205 Lock wait timeout exceeded; try restarting transaction 

提醒你這也失敗在5.2我們什麼時候嘗試使用模型事件。事件/觀察者試圖立即寫入日誌表,而不是事務提交時。有沒有辦法讓觀察員/事件類在Laravel 5.2中的事務中正常工作,還是應該恢復到Laravel 5.1?我目前的理論是,由於觀察者從事務中移除了一個層次,所以新代碼中的某些內容引入了一個不再尊重此層級事務的錯誤。

回答

1

如果您正在使用指向同一數據庫的多個數據庫連接,並且觀察者/偵聽器位於與默認連接不同的連接上,則會發生這種情況。

這發生在我身上,修復方法是確保觀察者在默認(或相同)連接上。

+0

謝謝大阿爾。這確實是個問題。 –