我需要为只有两个外键的表实现模型。在我的数据库中,我有这样的表:
product (id_product, ...)
category_to_product (FK id_category, FK id_product)
category (id_category, ...)
如何在Laravel中管理此连接?我应该为合并表实现模型以及它看起来如何? category_to_product
表不表示实体(/ model),只有设计关系属性。
数据库迁移
CategoryToProduct
Schema::create('category_to_product', function(Blueprint $table)
{
$table->integer('id_category')->unsigned();
$table->foreign('id_category')
->references('id_category')
->on('categories')
->onDelete('cascade');
$table->integer('id_product')->unsigned();
$table->foreign('id_product')
->references('id_product')
->on('products')
->onDelete('cascade');
});
产品
Schema::create('products', function(Blueprint $table)
{
$table->increments('id_product');
// ...
});
分类
Schema::create('categories', function(Blueprint $table)
{
$table->increments('id_category');
// ...
});
答案 0 :(得分:2)
@ pc-shooter关于创建方法是正确的。
但您仍然需要首先使用迁移创建数据透视表
Schema::create('products', function(Blueprint $table)
{
$table->increments('id')
$table->string('name');
}
Schema::create('categories', function(Blueprint $table)
{
$table->increments('id')
$table->string('name');
}
然后你的数据透视表
Schema::create('category_product', function(Blueprint $table)
{
$table->integer('category_id')
$table->foreign('category_id')->references('id')->on('categories');
$table->integer('product_id');
$table->foreign('product_id')->references('id')->on('products');
// And finally, the indexes (Better perfs when fetching data on that pivot table)
$table->index(['category_id', 'product_id'])->unique(); // This index has to be unique
}
答案 1 :(得分:1)
执行以下操作:
在模型类别:
中public function products(){
return $this->belongsToMany('Category');
}
在模型产品:
中public function categories(){
return $this->belongsToMany('Category', 'category_to_product');
}
在模型 CategoryToProduct :
中public function categories() {
return $this->belongsTo('Category');
}
public function products() {
return $this->belongsTo('Product');
}
请注意这些方法的命名! 这些与DB表名称相同。见ChainList 答案。强>