gpt4 book ai didi

php - 如何在 sqlite 上使用 laravel 迁移删除列?

转载 作者:行者123 更新时间:2023-12-05 03:05:08 24 4
gpt4 key购买 nike

我想为我的应用程序编写测试,但在运行迁移时出现错误;

There is no column with name

我的迁移文件

Schema::table('bill_payments', function (Blueprint $table) {
$table->dropColumn('attachment');
// $table->getColumns(); return empty array
// $table->dropColumn(['attachment']); I tried this
});

dd(Schema::hasColumn('bill_payments', 'attachment')); // Return false

// and this is not working because return false.

if(Schema::hasColumn('bill_payments', 'attachment'))
{
Schema::table('bill_payments', function (Blueprint $table) {
$table->dropColumn('attachment');
});
}

我还添加了 doctrine/dbal 2.5.13

我使用 mysql 运行测试,但速度很慢。

[已解决]

哇!我为表使用前缀。我删除了它,现在可以使用了。

最佳答案

关于迁移,您需要了解的一件事是它们会一直运行直到崩溃或成功,以您的示例为例:

Schema::table('bill_payments', function (Blueprint $table) {
$table->dropColumn('attachment');
});
//It will drop the column and stop here. When you run the migration again, it will output your error because the column no longer exists.
dd(Schema::hasColumn('bill_payments', 'attachment')); // Return false

您应该在迁移代码中拥有的是在 Down() 方法中进行反向操作。这意味着您运行迁移,它应用 Up() 并且当您回滚时,它会正确恢复。该错误确实是它的意思,它意味着当它到达与表 bill_payments 和列 attachment 相关的操作时,它识别出 attachment 没有不存在。

编辑:

文档中有与SQlite相关的内容:

"Dropping or modifying multiple columns within a single migration while using a SQLite database is not supported."

关于php - 如何在 sqlite 上使用 laravel 迁移删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com