2017-03-23 106 views
0

我有一個問題,我Laravel遷移:(無法創建laravel遷移外鍵

當我運行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') - > references(array('idVisiteur','mois') - > on('fichefrais');' –

+0

我認爲這是類似所以我嘗試了你的解決方案,但我仍然有同樣的錯誤當我試圖用phpmyadmin創建外鍵時,錯誤提到了列類型,但它是相同的 – Benjamin

回答

-1

您正在使用MySQL,那麼您的表是否在InnoDB引擎中定義? MyISAM不接受外鍵...

+0

這最好是作爲評論一個答案 –

+0

好的,對不起,這是我第一個答案... – Lourenci

0

請問您的visiteur表有一個id作爲主鍵嗎?如果是,是否有數據類型char長度的。 ** lignefraishorsforfait **表中的idVisiteur具有char數據類型,其必須與visiteur表中的主鍵相同。

0

問題是您聲明的外鍵沒有引用主鍵。如果你想創建一個外鍵到非主鍵,在您的「fichefrais」表列「雜物車」必須它是一個唯一約束