如果由于某种原因(例如,错字)中途迁移失败,它会提交一半的迁移,并将其余部分退出。它似乎没有尝试回滚它所做的事情(通过回滚一个包含事务或调用())laravel migrations离开数据库处于无效状态
如果您尝试手动回滚上次迁移, “php artisan migrate:rollback --step = 1”,它只回退上次之前的迁移,即在失败之前的回滚。如果客户的插入失败
公共功能了()
{
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();
(例如,我们忘了设置非空列,一个错字,或存在记录时:
考虑这个迁移它不应该),插入地址记录WAS。
迁移:回滚不回滚此迁移,它回滚之前,我们留下一个虚假的孤儿地址记录。显然,我们可以删除重新创建数据库并从头开始迁移,但那不是重点 - 迁移不应该让迁移完成的一半和数据库处于无效状态。
有没有解决方案?例如是否可以在迁移中放入交易,以便插入全部或全部?
如果我们在完成一半的迁移失败后查看迁移表,则不存在。
注意:我们使用迁移来插入(和修改/删除)应用程序运行所需的静态数据。它不是开发数据或测试数据。例如。国家的数据,货币数据,以及管理运营等
我我从未尝试添加交易,但它可能有效。我可能不得不在下一次尝试,而不是在进行回滚/迁移时不断地注释行。 – aynber