2015-02-10 45 views
0

我試圖用Laravels遷移創建多個外鍵的表。我有一個問題,遷移表像這樣Laravel遷移導致一般錯誤的外鍵1215

Schema::create('problems', function($table) 
     { 
      $table->increments('id'); 
      $table->integer('created_by')->unsigned(); 
      $table->foreign('created_by')->references('id')->on('users'); 
      $table->integer('category')->unsigned(); 
      $table->foreign('category')->references('id')->on('categories'); 
      $table->timestamps(); 
     }); 

一類遷移

Schema::create('categories', function($table) 
     { 
      $table->increments('id'); 
      $table->string('category_name'); 
      $table->timestamps(); 
     }); 

我的第一個外鍵進入用戶的遷移工作正常,但只要它擊中了類別ID的外鍵,它給人以

SQLSTATE HY000一般錯誤1215不可能D'ajouter德contraintes D'指數externe(SQL;變更表 '問題' 添加約束 PR oblems_category_foreign外鍵(「類」)引用 「類」(「身份證」))

(我不能正確讀取法國,我不知道爲什麼它給了我錯誤的法語。我不能找到一種方法來改變它,因爲我不是法國人,我也不能理解它)

我不明白爲什麼這對一個而不是另一個工作時,他們本質上是相同的東西。

回答

3

您需要確認遷移文件的順序。例如,在實際創建類別表之前,您無法使用在類別表上引用id的外鍵創建問題表。

對於法國錯誤問題,看看這個question

0

我不得不將外鍵添加到不同的遷移文件中,以解決問題。

1

您必須更改遷移命令

|-database/ 
|--migrations/ 
|---2015_02_02_141725_create_problems_table.php 
|---2015_03_01_234626_create_categories_table.php 

應該是:

|-database/ 
|--migrations/ 
|---2015_01_01_234626_create_categories_table.php 
|---2015_02_02_141725_create_problems_table.php 

最後:

php artisan migrate 
0

我有同樣的問題,日前,問題得到了以下:

on use $table->increments('id');,它生成一個unsigned整數與長度10。和$table->integer('user_id')生成一個不unsigned整數與長度11

要解決它,你可能放棄unsigned並設置將與其他只爲auto increment場,這樣所有字段的表:

$table->integer('id', true); // true represents the auto increment type 

,當然,設置$table->engine = 'InnoDB';