ChatGPT解决这个技术问题 Extra ChatGPT

在 Laravel 中安全移除迁移

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

创建迁移命令:

php artisan migrate:make create_users_table

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

迁移文件:

2013_05_31_220658_create_users_table

c
cespon

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

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

如果您确实运行了迁移 (php artisan migrate),您可以这样做:

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

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

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


谢谢。删除迁移后我的问题是忘记运行 composer dump-autoload
如果您已运行迁移,“正确”的方法是运行 migrate:rollback 来回滚迁移,然后删除迁移文件并转储自动加载。无需破解数据库或迁移表。
(php artisan migrate)(Y)之后的步骤的好答案
当我错的时候,我的上帝和我都在折磨自己。谢谢你。
很好的答案!我知道您的答案是针对旧版本的,但我相信 Laravel 6.x 不再需要运行 composer dump-autoload。可能值得注意以备将来参考?
J
Jason Lewis

如果迁移已经运行(阅读:已迁移),那么您应该回滚迁移以清除数据库表中的历史记录。回滚后,您应该能够安全地删除迁移文件,然后再次继续迁移。


不过,他还没有进行迁移。你不能回滚你实际上没有做的事情,对吗?
不,您不能,但如果是这种情况,那么迁移数据库中不应该存储任何历史记录,这意味着您可以安全地删除该文件。
L
LastM4N

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


我喜欢这不是问题的答案,但却有用并拯救生命。
S
Stephane

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


删除迁移和迁移表中的行。这对我来说似乎是最直接的解决方案。
k
k0pernikus

不要在生产环境中运行它,但如果您正在开发中并且期望的结果是从头开始,这应该可以完成工作:

# php artisan migrate:fresh

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


3 点赞? OP 要求一种方法来删除迁移,而不是破坏和刷新整个数据库。这是一个糟糕的建议,除非你知道自己在做什么,否则不要这样做。
请阅读有关 migrate:refresh 和 migrate:fresh 之间的区别,您看到的是第一个描述,后者会进行部分重置,避免手动工作!
migrate:fresh 立即删除所有表并重新运行迁移,就像第一次运行一样。它没有任何偏颇..任何数据都会消失。它将解决问题,但它不是问题的有效答案。
此命令删除所有表并重新运行迁移而不是删除迁移文件:|
请在运行此命令之前阅读
J
JR Tan

我不小心创建了两次 create_users_table。它覆盖了一些类并将回滚变成了 ErrorException。

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

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

并编辑路径。那么你的回滚应该没问题。


如果您 - 像我一样 - 只是继续并重命名了迁移文件,这就是您正在寻找的答案!谢谢。
您也可以简单地执行“composer dumpautoload”
U
Udhav Sarvaiya

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

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

php artisan migrate:rollback --step=1

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

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

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


D
DAVID AJAYI

我宁愿手动做

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

对我有用,希望对你有帮助!


B
Bhargav Rao

这对我有用:

我删除了数据库中的所有表,主要是迁移表。 php工匠迁移:刷新

在 laravel 5.5.43