Laravel 截断表在测试期间导致错误

Ezr*_*ab_ 4 phpunit laravel laravel-sail

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

我正在使用这个RefreshDatabase特性。

我的代码如下所示:

Model::query()->truncate();
Run Code Online (Sandbox Code Playgroud)

小智 11

该错误是由truncate操作引起的

基于/sf/answers/106608211/上的答案

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

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

这是它的运行方式

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