Laravel 5.1 - 使用 SQLite 的测试数据库在向下迁移时给出“没有这样的索引”错误()

Chr*_*sco 6 php sqlite laravel laravel-5 laravel-5.1

下面的架构构建的代码工作完美运行时,php artisan migratephp artisan migrate:rollback当地分期(生产等)的环境。这将运行一条alter table语句来修改现有表。

注:由于行是空的,没有必要设置nullabledefault valuecategory_id

// up
$table->integer('category_id')->unsigned()->index();
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');

// down
$table->dropForeign('stores_category_id_foreign');
$table->dropColumn('category_id');
Run Code Online (Sandbox Code Playgroud)

我正在使用配置使用SQLite运行我的功能测试:memory:,并且在数据库回滚时出现以下错误(感谢DatabaseMigrationstrait)

General error: 1 no such index: stores_category_id_index (SQL: DROP INDEX stores_category_id_index)
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,是否需要在 SQLite 上配置一些我不知道的内容?

小智 2

默认情况下,SQLite 禁用外键支持。

您需要手动启用它或使用不同的数据库。

Laravel 5.1:启用 SQLite 外键约束

上面的链接讨论了如何执行此操作,但本质上您需要找到一种方法在测试之前在功能测试环境上运行“PRAGMAforeign_keys=1”。

免责声明:我只在 Laravel 5 上尝试过这个