【问题标题】:Laravel drop table with migration without rollbackLaravel 删除表,迁移不回滚
【发布时间】:2015-08-05 04:08:27
【问题描述】:

使用 Laravel 5,我已经完成了一些数据库迁移,并意识到不再需要我在第一轮迁移中创建的表。我想摆脱表以避免将来出现任何混乱,但显然我还需要在重置所有迁移时防止重新创建表。

我认为最好完全删除迁移,这样如果我刷新表就根本不会创建。然后也许只是手动删除表。

我的数据库中确实有数据,所以我宁愿不回滚并刷新所有内容,如果我刷新迁移,删除表并将其从重新创建中删除的正确方法是什么?

【问题讨论】:

  • 我只需进行迁移以删除表,应用迁移,然后删除该迁移以及原始迁移以从您的迁移文件夹中创建表。我读过,只要迁移不再处于活动状态,您就可以安全地直接删除迁移。我自己尝试过,没有遇到任何问题(尽管之后我从未从迁移中重建过我的数据库)。
  • 迁移表中对该迁移的引用怎么样?
  • 对不起,我想我的回答不完整。删除文件后,您应该运行php composer dump-autoload。可能值得运行一个测试迁移,您可以稍后回滚以验证它是否按预期工作,因为我绝不是 laravel 专家。不过,希望这可能会让您朝着正确的方向前进。
  • 哦,正如您提到的,删除数据库条目。对于您的问题如此漫不经心的回答,我深表歉意。
  • 我按照您的建议进行了操作,并继续刷新迁移以查看它是否可以正常工作。一切都很成功。谢谢

标签: laravel laravel-5


【解决方案1】:

你可以像这样使用 up 函数创建一个新的迁移

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->drop();
    });
}

【讨论】:

    【解决方案2】:

    在我的脑海中,我看到了两种可以实现此目的的方法。

    如果您有 50 多张桌子,方法 1 会很长而且有点烦人。 方法 2 是实现此目的的清洁高效且侵入性较小的方法(我选择了这种方法)。

    方法一

    以下是我将采取的措施来解决这种情况:

    • 第 1 步

    导出数据库表和数据,以便您备份所有内容,以防万一出现问题。

    • 第 2 步

    进入您的迁移目录并找到特定于该表的文件

    • 第 3 步

    在公共函数 up() 内部插入:

        Schema::table('table_name', function (Blueprint $table) {
              $table->drop();
        });
    
    • 第 4 步

    进入迁移文件中的每个表并注释掉以下两种方法:

        public function up()
    

        public function down()
    
    • 第 5 步

    打开您的控制台并 cd 进入您的 laravel 应用程序所在的目录

    • 第 6 步

    运行以下命令:

        php artisan migrate
    

    通过运行上述命令,表删除方法将激活,并且所有其他表应保持不变(如果您没有任何会阻止数据库删除表的外键约束)。

    如果您在该表上有任何活动的外键约束,请删除它们(因为您仍然计划删除该表)。

    方法二

    • 第 1 步

    在 database\migrations 目录中创建一个文件夹,并将其命名为“passive_rollback”

    • 第 2 步

    只需运行以下命令:

        php artisan migrate:rollback my_table_name_here --path=database/migrations/passive_rollback
    

    上述步骤将回滚位于您指定路径的单个表。此方法还可用于数据库版本控制和按相关性或部分组织模式。通过 laravel 让您更好地控制您希望处理的数据库的哪些部分!

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 1970-01-01
      • 2014-02-03
      • 2021-07-01
      • 2016-09-11
      • 2015-12-07
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      相关资源
      最近更新 更多