【发布时间】:2018-07-14 17:00:16
【问题描述】:
我确实在让数据库事务在模型上工作时遇到了问题。我已经参考了 SO 上的相关帖子,但还没有运气。
在我的示例中,我在数据库中创建了一条新记录。我应该能够回滚,新记录应该已经消失了不是吗?
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 约束的情况下进行两次保存。]
【问题讨论】:
-
您查看交易状态了吗?
-
@GaurangJoshi 在哪里查看?
-
DB::rollback();一定会被处决吗? -
@JonasStaudenmeir 是的,肯定会抛出异常。
-
你能把整个交易包在
\DB::enableQueryLog(); dd(\DB::getQueryLog());中并发布结果吗?
标签: php mysql laravel laravel-5 eloquent