laravel migrate 초학 에서 흔히 볼 수 있 는 잘못된 해결 방법

머리말
최근 에 끊 어 졌 다 이 어 졌 다 하 며 laravel 입문 공 부 를 시 작 했 습 니 다.간단 한 주소록 시스템 전 체 를 생각 하여 표 두 개,branches 하나,contacts 하 나 를 만 들 었 습 니 다.migration 파일 을 만 들 때 자세히 고려 하지 않 고 contacts 표를 만 들 었 습 니 다.contacts 표 에 브 랜 치 에 연 결 된 id 가 있 습 니 다.그 결과 migrate 명령 을 실 행 했 을 때 다음 과 같은 오류 가 발생 했 습 니 다.

[Illuminate\Database\QueryException] 
 
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `contacts` add constraint `contac 
 
ts_branch_id_foreign` foreign key (`branch_id`) references `branches` (`id`) on delete cascade) 
 
[PDOException] 
 
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint 
표 생 성 전후 불 규범 으로 인 한 것 으로 의심 되 므 로 branches 의 migration 파일 이름 의 날 짜 를 수 동 으로 수정 하고 실행 합 니 다.

php artisan migrate:reset 
다음 오류 가 발생 했 습 니 다:

[ErrorException] 
 
include(/Users/Ade/www/laravel_phonebook5.2): failed to open stream: Operation now in progress 
failed to open stream 오류 해결
오류 알림 만 봐 도 이해 가 안 돼 요.laravel 의 log 파일 을 봅 니 다.

more storage/logs/laravel.log 
ERROR 가 나타 난 그 말 을 찾 아 라:

[2016-09-29 18:05:35] local.ERROR: exception 'ErrorException' with message 'include(/Users/Ade/www/laravel_phonebook5.2): failed to open stream: Operation now in progress' in /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php:412 
Stack trace: 
#0 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(412): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'include(/Users/...', '/Users/Ade/www/...', 412, Array) 
#1 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(412): Composer\Autoload\includeFile() 
#2 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(301): Composer\Autoload\includeFile('/Users/Ade/www/...') 
#3 [internal function]: Composer\Autoload\ClassLoader->loadClass('CreateBranchesT...') 
#4 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(335): spl_autoload_call('CreateBranchesT...') 
#5 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(227): Illuminate\Database\Migrations\Migrator->resolve('2016_09_12_1728...') 
#6 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(206): Illuminate\Database\Migrations\Migrator->runDown(Object(stdClass), false) 
ClassLoader.php 파일 의 412 줄 에 오류 가 발생 했 습 니 다.
줄 바 꿈 코드 를 보 니 파일 을 호출 하 는 문 구 였 습 니 다.

이 파일 은 log 파일 에서 지적 되 었 습 니 다.즉,resolve('2016_09_12_1728...') .로그 가 제시 한 이 이름 은 제 가 수정 한 branch 의 migration 파일 이름 입 니 다.
우 리 는 정상 적 인 migration 파일 이 어디 에 나타 날 지 다시 찾 습 니 다.

mdfind 2014_10_12_000000_create_users_table.php|grep phonebook 

이 를 통 해 정상 적 인 곳 은 3 곳,수 정 된 곳 은 1 곳 에 불과 하 다 는 것 을 알 수 있다.
나타 나 지 않 은 두 파일 을 편집 합 니 다.
autoload 조정static.php 파일
vendor/copposer/autoload 발견static.php 파일 에서 branches 와 관련 된 문 구 는 다음 과 같 습 니 다.

'CreateBranchesTable' => __DIR__ ., 
이름 이 바 뀌 었 을 때 PHP Storm 은 자동 으로 이 파일 에 있 는 branches 파일 경 로 를 모두 삭제 해 주 었 습 니 다.넣 으 면 돼.
정상 적 인 migration 파일 이름 의 설정 상황 을 참조 하여

'CreateBranchesTable' => __DIR__ . '/../..' . '/database/migrations/2016_09_12_172822_create_branches_table.php', 
autoload 조정classmap.php 파일
우 리 는 autoload 를 발견 했다.classmap.php 파일 에서 branches 에 대한 경로 이름 은 변경 전 경로 입 니 다.

'CreateBranchesTable' => $baseDir . '/database/migrations/2016_09_29_172822_create_branches_table.php', 
수정 하 다

'CreateBranchesTable' => $baseDir . '/database/migrations/2016_09_12_172822_create_branches_table.php', 
migrate 명령 을 다시 실행 합 니 다.

php artisan migrate:reset 

OK,방금 잘못 이 사 라 졌 습 니 다.그런데 contacts 표 가 스크롤 백 되 지 않 은 것 을 발 견 했 습 니 다.
contacts 스크롤 백 실패 분석
sequel pro 를 통 해 데이터 베 이 스 를 연결 하여 보기

contacts 표 가 과연 존재 하 는 것 을 발 견 했 습 니 다.그러나 migration 표 에는 내용 이 없습니다.앞의 migrate 명령 을 실행 할 때 오류 가 발생 했 습 니 다.contacts 의 실행 기록 은 migrations 표 에 기록 되 지 않 았 습 니 다.migrate 명령 을 다시 실행 해 볼 수 있 습 니 다.먼저 이 두 장의 표를 수 동 으로 삭제 합 니 다.즉,데이터 베 이 스 를 비우 고 실행 합 니 다.

php artisan migrate 
먼저 contacts 표를 만 드 는 데 발생 하 는 오 류 를 무시 하고 sequel pro 를 새로 고침 합 니 다.

역시 migration 표 에 contacts 생 성 기록 이 없 으 니 reset 를 실행 할 때 contacts 의 스크롤 백 동작 이 없 는 것 도 당연 합 니 다.
contacts branch 를 만 들 수 없 음id 외부 키 해결
현재,우 리 는 이미 migrate 명령 을 실 행 했 습 니 다.우 리 는 이 최초 로 발생 한 오 류 를 다시 보 겠 습 니 다.

[Illuminate\Database\QueryException] 
 
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `contacts` add constraint `contacts_branch_id_foreign` foreign key (`branch_id`) references `br 
 
anches` (`id`) on update cascade) 
 
[PDOException] 
 
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint 
냉정 하 게 분석 해 보 세 요.SQL 오류 가 있 으 니 sequel pro 에서 이 SQL 문 구 를 손 으로 실행 해 보 세 요.

과연 실행 복귀 오류.
문 구 를 자세히 살 펴 보 니 틀 리 지 않 았 습 니 다.생각해 보 니 branch 인 것 같 습 니 다.id 형식 설명 과 branches 표 의 ID 형식 이 일치 하지 않 아서 생 긴 것 같 습 니 다.contacts 의 구 조 를 살 펴 보 니 Unsigned 가 연결 되 지 않 았 습 니 다.체크 한 다음 에 외부 키 를 추가 하 는 SQL 문 구 를 실행 하 는 데 성 공 했 습 니 다.

문제 의 원인 을 찾 으 면 데이터 베 이 스 를 비우 고 contacts 의 migration 파일 을 수정 하여 branch 를 조정 합 니 다.id:

$table->integer('branch_id')->unsigned()->comment('  ID'); 
migrate 명령 을 다시 실행 합 니 다.성공!

총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기