安全删除Laravel中的迁移


206

在Laravel中,似乎有一个用于创建迁移但不能删除的命令。

创建迁移命令:

php artisan migrate:make create_users_table

如果要删除迁移,是否可以安全地删除database / migrations文件夹中的相应迁移文件?

迁移文件:

2013_05_31_220658_create_users_table

Answers:


375

我无意中创建了一个名字错误的迁移(命令:)php artisan migrate:make。我没有运行php artisan migrate)迁移,因此决定将其删除。我的步骤:

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

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

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

b)如果migrate:rollback不起作用,请手动执行(我记得以前版本中的migration:rollback的错误):

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

2
谢谢。对于我来说,删除迁移后的问题是忘记运行作曲家dump-autoload
Theo Kouzelis 2014年

7
如果已运行迁移,则“正确”的方法是运行migrate:rollback以回滚迁移,然后删除迁移文件并转储自动加载。无需修改数据库或迁移表。
杰克·威尔逊

(php artisan migration)之后的好答案(Y)
Imran Khan 2015年

当我错了时,我的上帝和我折磨自己。谢谢。
巴勃罗·孔特雷拉斯

4.从数据库中删除实际的表
Jin

64

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


不过,他还没有进行迁移。您无法回滚实际上没有执行的操作,可以吗?
Stephane 2013年

9
不,您不能,但是在这种情况下,迁移数据库中不应存储任何历史记录,这意味着您可以安全地删除文件。
詹森·刘易斯

14
 php artisan migrate:fresh

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

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


5
3票?OP要求一种删除迁移的方法,而不是破坏和刷新整个数据库。这是可怕的建议,除非您知道自己在做什么,否则请不要这样做。
Goodbytes

请仔细阅读一下您所描述的migration:refreshmigration:fresh之间的区别,后面介绍的是部分重置,避免了手动操作!
joash

1
migration:fresh立即删除所有表并重新运行迁移,就像第一次运行一样。没有任何部分..任何数据都将消失。它将解决问题,但不是对问题的有效答案。
Goodbytes


7

我不小心创建了两次create_users_table。它重写了一些类,并将回滚转换为ErrorException。

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

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',

并编辑路径。然后您的回滚应该很好。


如果您-像我一样-只是继续并重命名了迁移文件,这就是您想要的答案!谢谢。
Berdus 2014年

2
您也可以只做“ composer dumpautoload”
FooBar 2014年

5

我同意当前的答案,我只想补充一点点信息。

Laravel 5.3及更高版本中已添加了一项新功能,使您可以撤消单个迁移:

php artisan migrate:rollback --step=1

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

这是运行迁移时的一项很棒的功能

这样,您只需两步即可安全地删除laravel中的迁移


0

我宁愿手动进行

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

为我工作,希望对您有所帮助!


-2

这对我有用:

  1. 我删除了数据库中的所有表,主要是迁移表。
  2. php artisan migrate:refresh

在laravel 5.5.43中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.