事务在 laravel 中不起作用

Posted

技术标签:

【中文标题】事务在 laravel 中不起作用【英文标题】:transaction not working in laravel 【发布时间】:2018-04-14 00:52:03 【问题描述】:

我在 laravel 中的交易有问题。 当我尝试使用以下代码执行此操作时,屏幕上会出现错误,好像我没有交易一样。

\DB::transaction(function() use ($movement, $movementRows) 
   $movement->save();
   $movement->rows()->saveMany($movementRows);
);

当我尝试使用下面的代码执行此操作时,第一个对象被保存,尽管第二个对象失败。

\DB::beginTransaction();
try 
     $movement->save();
     $movement->rows()->saveMany($movementRows);
      \DB::commit();
      $success = true;
 catch (\Exception $e) 
    $success = false;
    \DB::rollback();


if ($success) 
    // the transaction worked ...

【问题讨论】:

php 7.1.7。 Laravel 5.1 出现什么错误? 查询出了什么问题,我的测试使用了错误的外键。 【参考方案1】:

确保您使用的是支持事务的引擎。 InnoDB 支持事务,但 MyIsam 不支持。因此,例如在 PhpMyAdmin 中打开您的数据库,并确保所有表都设置为 InnoDB 而不是 MyISAM(假设您使用的是 mysql - 您没有提到您使用的数据库)。

【讨论】:

是的,我使用的是 MySQL,表引擎是 InnoDB 好的,你使用的是最新的 Laravel 5.1 版本吗?对于第一个代码异常没有被捕获,它们只回滚事务并重新抛出异常。在这两种情况下,事务都应该起作用。抛出了什么确切的异常?您 100% 确定,该移动记录是在此处创建的吗? Laravel 框架版本 5.1.46 (LTS)。我在第一个代码中写了一个 try-catch 部分,并且发生了同样的事情:即使第二个记录失败,也会保存第一个记录 好的,但正如我所说,确切的例外是什么?也许确定这里发生了什么很重要,因为通常它应该可以正常工作。 PDOException #664 #message: "SQLSTATE[23000]: 完整性约束违规:1452 无法添加或更新子行:外键约束失败 (siie_cartro.wms_mvt_rows, CONSTRAINT @ 987654323@ 外键 (item_id) 引用 erpu_items (id_item) 删除级联)"

以上是关于事务在 laravel 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

laravel 项目在“http://localhost/public/”中不起作用,页面显示“此页面不起作用”

事务注释在 Spring Boot 中不起作用

为啥在 laravel 的 whereBetween 中不起作用

发布请求在 Laravel 中不起作用

为啥在 RegisterController 中创建函数在 laravel 中不起作用

为啥在模式内部切换在 laravel 中不起作用?