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 删除表,迁移不回滚的主要内容,如果未能解决你的问题,请参考以下文章