首页 > 解决方案 > Laravel 截断表在测试期间导致错误

问题描述

我试图截断一个表,但每次我尝试通过测试运行它时,我都会得到一个 PDOException: There is no active transaction

我正在使用该RefreshDatabase特征。

我的代码如下所示:

Model::query()->truncate();

标签: laravelphpunitlaravel-sail

解决方案


错误是由truncate操作引起的

基于https://stackoverflow.com/a/1522974/6644975上的答案

当您执行truncate语句时,事务被提交,然后 TRUNCATE 被执行并且无法撤消。

这会影响RefreshDatabase为每个测试使用事务的特征。

这是它的运行方式

  1. RefreshDatabase创建交易
  2. 你在这里对数据库做一些事情
  3. 你执行truncate
  4. Truncate提交事务
  5. RefreshDatabase尝试提交事务但无法提交,因为它已经提交导致错误There is no active transaction

推荐阅读