如果一个迁移由于任何原因(例如拼写错误)中途失败,它将提交一半的迁移,其余的则不做。它似乎并没有试图倒退它刚刚做的事情。(通过回滚包含的事务或调用down())
如果您尝试手动回滚上次迁移,例如。
php artisan migrate:rollback --step=1
,它只回滚最后一个之前的迁移,即失败迁移之前的迁移。
考虑这种迁移:
public function up()
{
DB::table('address')->insert(['id'=>1,'street'=>'Demo', 'country_id'=>83]);
DB::table('customer')->insert(['id'=>1,'username'=>'demo','address_id'=>1]);
}
public function down()
{
DB::table('customer')->where('id',1)->delete();
DB::table('address')->where('id',1)->delete();
}
如果插入客户失败(例如,我们忘记设置非空列、输入错误或不应该存在的记录),则插入地址记录。
migrate:rollback
不会回滚此迁移,而是回滚之前的迁移,留下了虚假的孤立地址记录。显然,我们可以放弃重新创建数据库并从头开始运行迁移,但这不是点迁移,迁移不应该让一半的迁移完成,数据库处于无效状态。
有解决方案吗?e、 g.是否可以将事务放入迁移中,使其全部插入或不插入?
注意:我们使用迁移来插入(和修改/删除)应用程序运行所需的静态数据。它不是开发数据或测试数据。E、 g.国家数据、货币数据以及管理操作员等。