2017-03-23 6 views
0

내가 내 Laravel 마이그레이션 :(에 문제가 laravel 마이그레이션와 외래 키를 만들 수 없습니다.는</p> <p>내가 PHP는 장인 마이그레이션을 실행하는거야, 그것은 외래 키에 중지

먼저 마이그레이션

/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::enableForeignKeyConstraints(); 
    Schema::create('fichefrais', function (Blueprint $table) { 
     $table->char('idVisiteur', 4); 
     $table->foreign('idVisiteur')->references('id')->on('visiteur'); 
     $table->char('mois',6); 
     $table->primary(['idVisiteur', 'mois']); 
     $table->integer('nbJustificatifs'); 
     $table->decimal('montantValide', 10, 2); 
     $table->date('dateModif'); 
     $table->char('idEtat', 2); 
     $table->foreign('idEtat')->references('id')->on('etat'); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::dropIfExists('fichefrais'); 
} 

명령을 실행 한 후 두 번째

/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::enableForeignKeyConstraints(); 
    Schema::create('lignefraishorsforfait', function (Blueprint $table) { 
     $table->integer('id'); 
     $table->primary('id'); 
     $table->char('idVisiteur', 4); 
     $table->char('mois',6); 
     $table->foreign('idVisiteur')->references('idVisiteur')->on('fichefrais'); 
     $table->foreign('mois')->references('mois')->on('fichefrais'); 
     $table->char('libelle', 100); 
     $table->date('date'); 
     $table->decimal('montant', 10, 2); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::dropIfExists('lignefraishorsforfait'); 
} 

,이 오류가 발생했습니다 :

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table gsb_larave.#sql-176_b9 (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table lignefraishors forfait add constraint lignefraishorsforfait_mois_foreign foreign key (mois) references fichefrais (mois) on delete cascade on update cascade)

[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table gsb_laravel.#sql-176_b9 (errno: 150 "Foreign key constraint is incorrectly formed")

+0

문제 어쩌면에 고유 제한와 열이어야 'fichefrais'에 기본 키를 넣었고 당신은'lignefraishorsforfait'에 두 개의 다른 FK에서 참조하고 있습니다. 어쩌면'$ table-> foreign (array ('idVisiteur', 'mois') -> 참조 (array ('idVisiteur', 'mois') -> on ('fichefrais')) ' –

+0

나는 그것이 그래서, 당신의 솔루션을 시도하고 여전히 동일한 오류가 있습니다. phpmyadmin 함께 외래 키를 만들려고 할 때 열 형식에 대해 오류 회담하지만 그것은 동일합니다 – Benjamin

답변

-1

당신은 MySQL을 사용하고 있으므로 테이블은 InnoDB 엔진에 정의되어 있습니까? MyISAM은 외래 키를 허용하지 않습니다 ...

+0

이것은 코멘트로 더 나은 대답. –

+0

죄송합니다. 첫 번째 답변 중 하나입니다 ... – Lourenci

0

귀하의 visiteur 테이블은 기본 키로 ID를 갖고 있습니까? 예인 경우 데이터 유형이이고 문자이고 길이가이고 인 데이터 유형이 있습니까? ** lignefraishorsforfait ** 테이블의 idVisiteurvisiteur 테이블의 기본 키와 같아야하는 char 유형의 데이터를가집니다.

0

을 선언하는 외래 키가 기본 키을 참조하지 않는 것이 문제입니다. 가 아닌 기본 키에 대한 외부 키를 생성 할 경우, 'fichefrais'테이블 의 열 'mois는' 당신이 복합을 가지고