在Laravel中安全地删除迁移

Glo*_*alz 186 php database laravel artisan-migrate

在Laravel中,似乎有一个创建迁移的命令,但不是删除.

创建迁移命令:

php artisan migrate:make create_users_table
Run Code Online (Sandbox Code Playgroud)

如果我想删除迁移,我可以安全地删除database/migrations文件夹中的相应迁移文件吗?

迁移文件:

2013_05_31_220658_create_users_table
Run Code Online (Sandbox Code Playgroud)

mal*_*kan 343

我不小心创建了一个名字不好的迁移(命令:) php artisan migrate:make.我没有运行(php artisan migrate)迁移,所以我决定删除它.我的步骤:

  1. 手动删除下的迁移文件 app/database/migrations/my_migration_file_name.php
  2. 重置composer自动加载文件: composer dump-autoload
  3. 放松

如果您确实运行了migration(php artisan migrate),则可以执行以下操作:

a)运行migrate:rollback- 这是撤消上次迁移的正确方法(Thnx @Jakobud)

b)如果migrate:rollback不起作用,请手动执行(我记得迁移的bug:以前版本中的回滚):

  1. 手动删除下的迁移文件 app/database/migrations/my_migration_file_name.php
  2. 重置composer自动加载文件: composer dump-autoload
  3. 修改数据库:从迁移表中删除最后一个条目

  • 如果您已经运行了迁移,那么"正确"的方法是运行`migrate:rollback`来回滚迁移,然后删除迁移文件并转储自动加载.无需破解数据库或迁移表. (5认同)
  • 谢谢.删除迁移后的gottcha忘了运行composer dump-autoload (2认同)
  • 对我来说,工作也在laravel 5:非常感谢. (2认同)
  • 我认为“放松”应该是第一步,大声笑。 (2认同)
  • 很好的答案!我知道您的答案是针对旧版本的,但我相信从 Laravel 6.x 开始不再需要运行“composer dump-autoload”。可能值得注意以供将来参考? (2认同)

Jas*_*wis 64

如果已运行迁移(读取:已迁移),则应回滚迁移以从数据库表中清除历史记录.回滚后,您应该能够安全地删除迁移文件,然后再继续迁移.

  • 不,你不能,但如果是这样,则迁移数据库中不应存储历史记录,这意味着您可以安全地删除该文件. (9认同)

Ste*_*ane 12

您可能还需要从迁移表中删除该条目.


Las*_*M4N 10

不要运行 php artisan migrate:fresh会删除所有表

  • 我喜欢这不是问题的答案,但却很有用,可以拯救生命。 (16认同)

JR *_*Tan 7

我不小心创建了两次create_users_table.它覆盖了一些类并将回滚转换为ErrorException.

您需要做的是在vendor/composer文件夹中找到autoload_classmap.php并查找特定的代码行,例如

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',
Run Code Online (Sandbox Code Playgroud)

并编辑路径.然后你的回滚应该没问题.

  • 你也可以简单地做"composer dumpautoload" (2认同)

joa*_*ash 6

 php artisan migrate:fresh
Run Code Online (Sandbox Code Playgroud)

如果您正在开发中并且期望的结果是从头开始,则应该完成这项工作。

在生产中,这可能不是您想要的,所以您应该被广告吸引。(migrate:fresh命令将从数据库中删除所有表,然后执行migrate命令)。

  • 3票?OP要求一种删除迁移的方法,而不是破坏和刷新整个数据库。这是可怕的建议,除非您知道自己在做什么,否则请不要这样做。 (5认同)
  • migrate:fresh 立即删除所有表并重新运行迁移,就像第一次运行一样。没有任何偏颇之处……任何数据都将消失。它将解决问题,但它不是问题的有效答案。 (4认同)

DAV*_*AYI 6

我宁愿手动完成

  1. 首先删除模型(如果您不再需要该模型)
  2. ...database/migrations从文件夹中删除迁移
  3. 如果您已经迁移,即如果您已经运行php artisan migrate,请登录您的 phpmyadmin 或 SQL(无论哪种情况)并在数据库中删除由迁移创建的表
  4. 仍然在数据库的迁移文件夹中,找到具有该迁移文件名的行并删除该行。

对我有用,希望有帮助!


Udh*_*iya 5

我同意当前的答案,我只想添加更多信息。

Laravel 5.3 及以上版本添加了一项新功能,允许您取消单个迁移:

php artisan migrate:rollback --step=1
Run Code Online (Sandbox Code Playgroud)

之后,手动删除下的迁移文件 database/migrations/my_migration_file_name.php

当您运行迁移时,这是一个很棒的功能

这样,你就可以安全的删除laravel中的迁移,只需要2步