使用Laravel如何获得某个类别的特定尺寸的产品?

时间:2019-01-06 06:54:30

标签: php mysql laravel eloquent

我有这样的类别迁移:

id
title
parent_id

然后我将产品存储在另一个这样的迁移表中

id
category_id
title
price

然后我将产品存储在另一个迁移表库存中,如下所示:

id
product_id
size (like M/L/1 Year etc)
qty

我可以使用以下查询获取所有类别的产品:

$category = Category::first();
$products = $category->products;

我的问题是如何获得特定尺寸的产品?例如我想获得一个类别的所有M尺寸产品?

更新后的答案:

$category = Category::first();
$products = $category->products()
                     ->whereHas('stocks', function($q){
                          $q->where('size', '=', 'M');
                      })
                     ->get();

2 个答案:

答案 0 :(得分:1)

首先,您将获得所有类别。

$category = Category::first(); // You can get all the categories or in where condition whatever your need
$size = "M" //Comming from the request

对于具有上述类别和尺寸的产品 希望您在产品模型中为库存定义了关系。

$product = $category->whereHas('products', function($query) use ($size){
    return $query->whereHas('stock', function($stock) use ($size){
        return $stock->where('size', $size);
    });
})->with(['products'=>function($q) use ($size){
    return $q->whereHas('stock', function($stock) use ($size) {
        return $stock->where('size', $size);
    });
}])->get();

这将为您提供仅包含要求中提供尺寸的产品的类别。

答案 1 :(得分:0)

可以,

$category = Category::first();
$products = $category->products()
                     ->whereHas('stocks', function($q){
                          $q->where('size', '=', 'M');
                      })
                     ->get();