Laravel 5.2 升级导致 sql 锁定错误,不尊重数据库事务

Laravel 5.2 upgrade causes sql lock error, doesn't respect database transactions

我们与 Laravel 5.1 中的一些 Eloquent 代码相处得很好:

DB::transaction(function () {

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

});

Bla Eloquent 模型有一个模型观察者 class,它检查创建、更新和删除,然后写入日志 table。在 Laravel 5.1 中这完美地工作但是在升级到 5.2 之后它似乎忘记了它在一个事务中并抛出这个错误因为它实际上试图写入日志 table:

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

请注意,当我们尝试使用模型事件时,这在 5.2 中也会失败。 event/observer 尝试立即写入日志 table 而不是在提交事务时。有没有办法让 observer/event classes 在 Laravel 5.2 的交易中正常工作,或者我应该恢复到 Laravel 5.1?我目前的理论是,由于观察者从事务中移除了一个级别,新代码中的某些内容引入了一个不再尊重该级别事务的错误。

如果您使用指向同一个数据库的多个数据库连接并且 observer/listener 与默认连接位于不同的连接上,则可能会发生这种情况。

这件事发生在我身上,修复是为了确保观察者处于默认(或相同)连接上。