首页 > 解决方案 > 如何从类别 laravel 中获取产品的最低价格

问题描述

我有具有关系的模型类别:

public function attribute()
{
    return $this->hasMany('App\Models\Attribute');
}

public function children()
{
    return $this->hasMany(self::class, 'parent_id');
}

public function products()
{
    return $this->hasMany('App\Models\Product');
}

我如何从儿童类别中获得产品的最低价格(如果存在)。

这段代码:

$category = Category::whereId('id', $categoryId)->first();
if($category->children) $products = $category->children()->products()->min('price'); }

不工作。我得到错误:

Method Illuminate\Database\Query\Builder::products does not exist. (View: 

标签: phplaravel

解决方案


您的方法的返回值children()是一个集合,因此您不能在该集合上调用产品。您要么必须迭代集合并获得每个类别的最低价格,要么加入您的产品,将它们分组并获得每个组的最低价格:

$childrenWithMinPrices = $category->children()
    ->join('products', 'products.category_id', '=', 'categories.id')
    ->select('categories.*', DB::raw('MIN(products.price) AS minPrice'))
    ->groupBy('categories.id')
    ->get();

您可能必须更改上述查询中的表名和列名以适合您的架构。

注意:我把这个写在我的脑海里,我可能会弄错语法。如果有任何问题,请告诉我。


推荐阅读