在laravel中获取带有类别名称和子类别名称的产品名称

时间:2017-09-29 07:47:41

标签: database laravel tree

我需要带有产品名称的类别名称,我在数据库类别和产品中有两个表,我想获得有关或相关类别的产品的产品 例如: -

带列表的类别和子目录

1 个答案:

答案 0 :(得分:1)

您需要建立多对多关系,因为每个产品可以有多个类别,每个类别都可以与多个产品相关联。

Laravel文档非常好,您可以查看它:https://laravel.com/docs/5.5/eloquent-relationships#many-to-many

假设您的模型为ProductCategory,您可以执行以下操作:

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, ..]);

有关特定需求的更多详细信息,请阅读上面链接的文档