我试图在两个表(类别和品牌表)上引用产品的ID。
public function up()
{
Schema::create('products', function($table)
{
$table->increments('id');
$table->integer('category_id')->unsigned();
$table->integer('brand_id')->unsigned();
$table->string('title');
$table->text('description');
$table->decimal('price', 6, 2);
$table->boolean('availability')->default(1);
$table->string('image');
$table->timestamps();
});
Schema::table('products', function($table){
$table->foreign('category_id')->references('id')->on('categories');
$table->foreign('brand_id')->references('id')->on('brands');
});
}
但我收到以下错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `products` add constraint products_brand_id_foreign foreign k
ey (`brand_id`) references `brands` (`id`))
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
这是正确的方法吗?
更新
迁移品牌表的公共功能
public function up()
{
Schema::create('brands', function($table){
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
解决方案
最后,错误在于迁移的命名。由于brands表是最新的表,我必须将其名称从2014_12_12_164325_create_brands_table
更改为此2014_10_12_164325_create_brands_table
,并且表已成功迁移。
答案 0 :(得分:1)
一切看起来都不错。此外,由于它只是抱怨第二部分,外键的类别必须起作用。我认为品牌表并不存在或者存在问题。该表是否存在并且是否具有主键" id"?
我也用
$table->engine = 'InnoDB';
一开始,因为截至目前,MyISAM不支持外键。我不认为在上述情况下它应该是一个问题,但如果你想在数据库级别上做外键限制,可能仍然是可取的。