Laravel 5.2:`php artisan migrate`的错误

时间:2016-06-12 14:20:03

标签: php laravel laravel-5.2

我使用的是Laravel 5.2,运行php artisan migrate时出错,如下所示:

2016_06_12_134655_create_categories_table.php

public function up() {
   Schema::create('categories', function(Blueprint $table) {

   $table->increments('id');
   $table->string('category');
   $table->timestamps();

   });
}

2016_06_12_134659_create_goods_table.php

public function up() {
   Schema::create('goods', function(Blueprint $table) {

   $table->increments('id');
   $table->string('name');
   $table->string('unit_price');
   $table->integer('user_id')->unsigned();
   $table->tinyInteger('category_id')->unsigned();
   $table->foreign('user_id')->references('id')->on('users');
   $table->foreign('category_id')->references('id')->on('categories');
   $table->timestamps();

   });
}

$ php artisan migrate

enter image description here

我该怎么办?

3 个答案:

答案 0 :(得分:1)

可能会抱怨您在tinyInteger上使用category_id,尝试将其设置为integer - 假设您的类别表存在。如果没有,则需要确保具有外键约束的任何迁移都将在其之前迁移其相关表。在没有看到您的类别表的情况下,我可能想知道您的id的数据类型是否也是一样的。

答案 1 :(得分:0)

引用的表categories具有int类型的主键。如果要保留外键约束(在行中定义),请在引用列category_id中保持相同:

$table->foreign('category_id')->references('id')->on('categories');

答案 2 :(得分:0)

使用主键$table->Increments('id');

您应该使用Integer作为外键

    $table-> unsignedInteger('fk_id');
    $table->foreign('fk_id')->references('id')->on('table_name');

使用主键$table->tinyIncrements('id');

您应该使用unsignedTinyInteger作为外键

    $table-> unsignedTinyInteger('fk_id');
    $table->foreign('fk_id')->references('id')->on('table_name');

使用主键$table->smallIncrements('id');

您应该使用unsignedSmallInteger作为外键

    $table-> unsignedSmallInteger('fk_id');
    $table->foreign('fk_id')->references('id')->on('table_name');

使用主键$table->mediumIncrements('id');

您应该使用unsignedMediumInteger作为外键

    $table-> unsignedMediumInteger('fk_id');
    $table->foreign('fk_id')->references('id')->on('table_name');