执行 php artisan migrate 会导致数据丢失?
执行 php artisan migrate 会导致数据丢失?大家有遇到过这个问题嘛~
看了下laravel的文档,文档里面提示执行迁移操作确实可能会造成数据丢失,有大佬能解释下执行这个命令为什么会造成数据丢失嘛:
因为 migration 提供了 drop column、drop index 甚至 drop table 等不少破坏性接口
因为你可以在migration里面删改字段,数据,表,索引
我一般不会强制迁移,有问题还可以回去修改。
刚才翻了 源码
8.x 没用用到 –force 参数
9.x/10.x 有用到这个参数
跟你直接动表结构的效果一样,比如删字段或者缩减字段长度,必然会造成数据损失。
不修改migrate表就行
打开
\Illuminate\Database\Console\Migrations\MigrateCommand
,就能看到 handle 第一个调用的就是confirmToProceed
,这里就是force
选项第一次使用的地方,默认情况下,当判断设置的环境是 production(生产)时,就不允许你运行迁移。你必须要加上force
选项,才能在生产种运行。除了上面的 force 使用,下面还有在当数据库不存在(MySQL 和 SQLite),如果没有 force 选项或者,就可能会询问你是否要创建数据库(配置文件种的数据库名字或选中连接的数据库名字),如果有 force 的情况下,就会直接创建了。
正如这句话的后半段所说,force 在这里的主要目的,就是避免你在生产环境中执行迁移文件。在没有添加这个选项时,在生产环境中是无法运行迁移的,加了之后就可以运行。
而这里的破坏性主要就来源于你迁移文件中是怎么写的,你可能在迁移中删除、创建、修改了数据、字段、表信息等。
破坏性造成的是你自己带来的,而不是框架造成的。