【问题标题】:Safely remove migration In Laravel在 Laravel 中安全移除迁移
【发布时间】:2013-05-28 02:36:54
【问题描述】:

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

创建迁移命令:

php artisan migrate:make create_users_table

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

迁移文件:

2013_05_31_220658_create_users_table

【问题讨论】:

    标签: php database laravel artisan-migrate


    【解决方案1】:

    我不小心创建了一个名称不好的迁移(命令: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 不起作用,请手动执行(我记得以前版本中存在 migrate:rollback 的错误):

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

    【讨论】:

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

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

    【讨论】:

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

    请勿运行php artisan migrate:fresh,这会删除所有表格

    【讨论】:

    • 我喜欢这不是问题的答案,而是有用并拯救生命。
    【解决方案4】:
     php artisan migrate:fresh
    

    如果您正处于开发阶段并且期望的结果是从头开始,那么您应该完成这项工作。

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

    【讨论】:

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

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

    【讨论】:

      【解决方案6】:

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

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

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

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

      【讨论】:

      • 如果您 - 像我一样 - 只是继续并重命名了迁移文件,这就是您正在寻找的答案!谢谢。
      • 你也可以简单地做"composer dumpautoload"
      【解决方案7】:

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

      Laravel 5.3 及更高版本添加了一项新功能,可让您退出单个迁移:

      php artisan migrate:rollback --step=1
      

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

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

      这样,你只需两步就可以安全地移除 laravel 中的迁移

      【讨论】:

        【解决方案8】:

        我宁愿手动做

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

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

        【讨论】:

          【解决方案9】:

          这对我有用:

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

          在 laravel 5.5.43 中

          【讨论】:

            猜你喜欢
            • 2020-01-19
            • 2017-09-03
            • 2021-04-17
            • 2018-01-30
            • 2014-02-03
            • 1970-01-01
            • 2019-01-22
            • 2011-11-04
            • 2013-05-30
            相关资源
            最近更新 更多