2016-05-04 1 views
2

データベーストランザクションを尊重していない、SQLロックエラーが発生します。Laravel 5.2アップグレードは、我々はLaravel 5.1にいくつかの雄弁のコードでうまく一緒になっていた

DB::transaction(function() { 

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

}); 
のBla雄弁モデルはをチェックするモデルオブザーバクラスを持つ

作成、更新、および削除し、その後ログテーブルに書き込みます。 Laravel 5.1で、これは完璧に働いていたが、5.2にアップグレードした後、トランザクションにあります忘れているようだし、それが実際にログテーブルへの書き込みをしようとするため、このエラーがスローされます:ときに我々5.2に

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

マインドあなたも失敗し、このモデルイベントを使って試しました。イベント/オブザーバは、トランザクションがコミットされたときではなく、すぐにログテーブルに書き込もうとします。観察者/イベントクラスをLaravel 5.2のトランザクション内で正しく動作させる方法はありますか?それともLaravel 5.1に戻すべきですか?私の現在の理論は、オブザーバがトランザクションから1レベル削除されているので、新しいコードの何かがこのレベルのトランザクションをもはや尊重しないバグを導入したということです。

答えて

1

これは、同じデータベースを指す複数のDB接続を使用しており、オブザーバー/リスナーがデフォルトの接続とは異なる接続にある場合に発生します。

これは私にとって起こりました。この問題は、オブザーバーがデフォルト(または同じ)接続になっていることを確認することでした。

+0

ありがとうBig Al。それは確かに問題でした。 –