Laravel 迁移不起作用

Posted

技术标签:

【中文标题】Laravel 迁移不起作用【英文标题】:Laravel migration did not work 【发布时间】:2017-06-18 08:53:45 【问题描述】:

当我发出命令“php artisan migrate”时,它给了我错误:

base table or view already exists: 1050 table 'users' already exists.

并且不会更新我的数据库表。我回滚并再次迁移它,但对数据库没有任何影响,我创建了新项目,但在此命令上也出现错误。

【问题讨论】:

删除表并重新运行迁移...或者如果您在开发中更好,只需重新创建整个数据库; 您不需要删除整个数据库。按照我在下面的回答中描述的那样做 在使用迁移时,最好在迁移之前运行这两个命令composer dump-autoload && php artisan cache:clear @IvoHrádek 我做了这些但没用 【参考方案1】:

请按照以下步骤操作:

首先检查您当前的迁移状态 php artisan migrate:status

跳过已导入的表并查找新的迁移文件并从新的迁移文件中删除 create 语句。

这里的问题是您的新迁移文件可能包含 create 语句而不是 alter/drop 等。

修复该语句后,尝试运行

php artisan migrate

【讨论】:

【参考方案2】:

因为您运行了迁移,所以在您的数据库中的migrations 表中有运行迁移的引用。您需要手动删除该记录才能再次运行相同的迁移。

migration 表跟踪您运行的迁移。在迁移实际发生之前,Laravel 将记录写入migration 表。

如果发生错误,迁移失败,但参考记录存在。因此错误

基表或视图已存在:1050 表“用户”已存在。

处理此问题的最简单方法是,修复迁移文件的问题,从迁移表中删除参考记录并再次运行迁移。

【讨论】:

【参考方案3】:

我想您的迁移是在 DB 中创建一个表 users。此错误仅表示此类数据库中的表users already exits,因此无法创建。

您实际上可以做的是创建一个新的空数据库或重新创建您的整个数据库,以防丢失数据,我从您的帖子中假设。

回滚仅撤消最后一个迁移步骤。你可能会运行:

$ php artisan migrate:rollback --step=2 # rollback two last migrations

$ php artisan migrate:reset # rollback all migrations

我建议你通过Database: Migrations,这样你会获得更多关于数据库迁移的知识。

【讨论】:

【参考方案4】:

在您的迁移中首先进行此检查

  Schema::hasTable('users');

如果没有数据,可以先手动删除列。

【讨论】:

以上是关于Laravel 迁移不起作用的主要内容,如果未能解决你的问题,请参考以下文章

外键代码在 Laravel 8 的迁移中不起作用

Laravel 5.2 工匠“迁移”不起作用

Laravel 5.4数据库迁移不起作用[重复]

从 mysql 迁移到 postgresql 时,Laravel 雄辩的 ORM 不起作用

Laravel - php artisan migrate 不起作用

Laravel 外键 onDelete('cascade') 不起作用