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

时间:2016-07-08 22:46:17

标签: php mysql laravel laravel-migrations

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

$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过程中删除它。但是,我不明白如何修复此错误?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

这样,当您将其重新标记时,它会将列重命名为相应的列名,以便它向后兼容。