我似乎在让数据库事务在模型上工作时遇到了问题。我已经在网上看过相关的帖子了,但是还没找到。
在我的示例中,我在db中创建了一个新记录。我应该能够回滚,新记录应该已经消失了,不是吗?
try{
DB::beginTransaction();
$oNewMap = $oMap->replicate();
$oNewMap->name = "[test] " . $oNewMap->name;
$oNewMap->save(); // works
DB::rollBack(); / /record still in db
}
catch(\Exception $e){
DB::rollBack();
/* Transaction failed. */
}
发生回滚时,为什么保存的记录不会从数据库中消失?我是否遗漏了模型如何处理事务的一些内容?
物理表都是innodb,顺便说一句。
[已编辑:要将问题简化为简单的保存和回滚,请不要在第二次保存违反fk约束的情况下执行两次保存。]
3条答案
按热度按时间brjng4g31#
如果模型不使用默认数据库连接,则必须在事务中指定它:
v9tzhpje2#
看到你的问题,我记得很久以前,我也有同样的问题。
最后我发现,这个函数被调用了
rollBack
而不是rollback
-注意大写的bmtb9vblg3#
检查您的事务级别并确认您正在使用单个
beginTransaction()
所以,也许你会找到完美的解决方案。