如果由於某種原因(例如,錯字)中途遷移失敗,它會提交一半的遷移,並將其餘部分退出。它似乎沒有嘗試回滾它所做的事情(通過回滾一個包含事務或調用())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