Laravel 删除表,迁移不回滚

Posted

技术标签:

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

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于Laravel 删除表,迁移不回滚的主要内容,如果未能解决你的问题,请参考以下文章

Laravel migrate:回滚添加和删除表列

Laravel 迁移:使用 artisan 命令删除特定表并删除迁移文件

Laravel 迁移:删除特定表

如何从 Laravel 项目中删除所有迁移但保留表和字段

Laravel 迁移不起作用

如何迁移:在 laravel 5 中回滚特定表