我使用的是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
我该怎么办?
答案 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');