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

时间:2018-07-13 21:15:08

标签: php laravel sqlite

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

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');
    });
}

我也添加了教义/ dbal 2.5.13

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

[已解决]

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

1 个答案:

答案 0 :(得分:1)

关于迁移,您需要了解的一件事是按照您的示例运行直到崩溃或成功为止。

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."