0

我正在尝试使用 Laravel 迁移创建具有外键的多个表。我有一个像这样的迁移表问题

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();
        });

A类迁移

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

我进入用户迁移的第一个外键工作正常,但是一旦它击中类别 id 的外键,它就会给出一个

SQLSTATE HY000 一般错误 1215 Impossible d'ajouter des contraintes d'index externe (SQL; alter table 'problems' add constraint questions_category_foreign foreign key ('category') references 'categories' ('id'))

(我无法正确阅读法语,我不知道为什么它会给我法语错误。由于我不是法语,我无法找到更改它的方法,也无法理解)

我不明白为什么当它们本质上是同一件事时,这对一个而不是另一个起作用。

4

4 回答 4

2

您需要确保迁移文件的顺序正确。例如,id在实际创建类别表本身之前,您不能创建具有在类别表上引用的外键的问题表。

对于法语错误问题,请看这个问题

于 2015-02-10T06:51:18.910 回答
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
于 2015-03-02T21:51:15.433 回答
0

我不得不在不同的迁移文件中添加外键,解决了这个问题。

于 2015-02-10T01:57:12.803 回答
0

几天前我遇到了同样的问题,问题如下:

在使用$table->increments('id');时,它会生成一个长度为 10unsigned的整数。并生成一个长度为 11的非整数。$table->integer('user_id')unsigned

要修复它,您可能会放弃unsigned并将所有与其他字段相关的表设置为auto increment字段,如下所示:

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

当然,设置$table->engine = 'InnoDB';.

于 2016-02-04T16:18:02.847 回答