使用 Laravel 迁移重命名现有列,然后 运行 php artisan migrate:refresh 成功

Using Laravel migration to rename existing column and then run php artisan migrate:refresh successfully

我已经使用以下代码行成功重命名了之前在不同迁移中创建的现有列:

$table->renameColumn('custom_paper_note', 'custom_primary_paper_note');

但是,现在当我 运行 php artisan migrate:refresh 我得到以下错误:

[Illuminate\Database\QueryException]
  SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'custom_paper_note'; check that column/key exists (SQL: alter table `line_items` drop `custom_paper_note`)

[PDOException]
  SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'custom_paper_note'; check that column/key exists

这对我来说很有意义,因为我重命名了该列,现在它无法在 migrate:refresh 过程中删除它。但是,我不明白如何解决这个错误?

感谢您的帮助。

看起来您已经进行了重命名操作,但找不到旧名称。

在执行此迁移行之前添加检查列是否存在的 if 条件可能很有用。

在同一个迁移文件中,在down()函数中,声明重命名的逆函数:

Schema::table('table', function($table){
    $table->renameColumn('custom_primary_paper_note', 'custom_paper_note');
});

这样,当您将其恢复时,它会将列重命名为适当的列名,以便向后兼容。