어떤 이유로 든 마이그레이션이 실패한 경우 (예 : 오타) 마이그레이션의 절반을 커미트하고 나머지는 그대로 둡니다. 방금 수행 한 작업을 롤백하려고 시도하지 않는 것입니다 (포괄적 인 트랜잭션을 롤백하거나 아래로 호출하여)laravel 마이그레이션으로 인해 DB가 유효하지 않은 상태가됩니다.
마지막으로 이전 롤백을 수동으로 시도하는 경우 "php artisan migrate : rollback --step = 1", 마지막으로 이동하기 전의 롤백 즉, 실패 이전 롤백 만 롤백합니다. 고객의 삽입이 실패하면 우리가 null 이외의 열, 오타를 설정하는 것을 잊었다 예 (
공공 기능까지()
{
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 : 롤백은이 마이그레이션을 롤백하지 않으며, 이전 롤백을 롤백하고, 고아없는 고아 주소 레코드가 남습니다. 분명히 우리는 데이터베이스를 다시 만들지 않고 처음부터 마이그레이션을 실행할 수 있습니다.하지만 마이그레이션은 절반 정도의 마이그레이션을 완료하고 DB를 유효하지 않은 상태로 남겨 두지 않아야합니다.
해결책이 있습니까? 예 : 하나 또는 둘 모두를 삽입 할 수 있도록 마이그레이션에 트랜잭션을 넣을 수 있습니까?
반부 완료 마이그레이션이 실패한 후 마이 그 레이션 테이블을 보면 거기에없는 것입니다.
참고 : 우리는 마이그레이션을 사용하여 응용 프로그램이 실행해야하는 정적 데이터를 삽입 (및 수정/삭제)합니다. dev 데이터 또는 테스트 데이터가 아닙니다. 예 : 국가 데이터, 통화 데이터뿐만 아니라 관리 운영 등
당신은 트랜잭션 내부의 이러한 마이그레이션을 실행해야
I을 트랜잭션을 추가하지 않았지만 작동 할 수 있습니다. 롤백/마이그레이션을 수행 할 때 끊임없이 라인을 주석 처리하는 대신 다음 번에 시도해야 할 수도 있습니다. – aynber