2015-02-10 89 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';