我需要带有产品名称的类别名称,我在数据库类别和产品中有两个表,我想获得有关或相关类别的产品的产品 例如: -
带列表的类别和子目录
答案 0 :(得分:1)
您需要建立多对多关系,因为每个产品可以有多个类别,每个类别都可以与多个产品相关联。
Laravel文档非常好,您可以查看它:https://laravel.com/docs/5.5/eloquent-relationships#many-to-many
假设您的模型为Product
和Category
,您可以执行以下操作:
在Product.php
课程内:
public function categories() {
return $this->belongsToMany('App\Category');
}
在Category.php
课程内:
public function products() {
return $this->belongsToMany('App\Product');
}
现在您需要在数据库中创建表以支持关系(在多对多关系中,此表称为pivot
)
创建类似于以下内容的新迁移:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('category_product', function (Blueprint $table) {
$table->integer('category_id')->unsigned()->index();
$table->foreign('category_id')->references('id')->on('categories');
$table->integer('product_id')->unsigned()->index();
$table->foreign('product_id')->references('id')->on('products');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('category_product');
}
现在您可以非常简单地获取产品类别:
$product->categories; // You get a collection of categories
$product->categories(); // You get the query if you need to add some filters
以类似的方式,您可以获得特定类别的所有产品:
$category->products;
要在产品中添加类别,您可以通过多种方式进行操作,其中一些是:
$product->categories()->attach($category_id);
$product->categories()->sync([$category_id1, $category_id2, ..]);
有关特定需求的更多详细信息,请阅读上面链接的文档