laravel migrate 초학 에서 흔히 볼 수 있 는 잘못된 해결 방법
6697 단어 laravelmigrate자주 발생 하 는 오류
최근 에 끊 어 졌 다 이 어 졌 다 하 며 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 명령 을 다시 실행 합 니 다.성공!총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.