首页 > 解决方案 > 按关系排序 laravel

问题描述

我需要按某些属性 id 和他的值对产品进行排序。我有具有关系的模型产品:

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

ProductAttribute 模型有:

public function attribute()
{
    return $this->belongsTo('App\Models\AttributeValue', 'attribute_value_id');
}

我需要对attribute_id = 5 且具有该属性的所有值的产品进行排序。我尝试这样做:

$products = Product::active()->where(function($query) {
     $query->whereHas('attribute.attribute', function($q) {
         $q->where('attribute_id', 5)->orderBy('value', 'desc');
     });
})->get();

但这不起作用。

型号产品属性结构表:

模型AttributeValue结构表:

In value 可以是数值。请帮我解决这个问题。

标签: phplaravel

解决方案


您应该使用连接:

$products = Product::active()
    ->select('products.*')
    ->leftJoin('product_attribute', 'product_attribute.product_id', '=', 'products.id')
    ->leftJoin('attribute_values', function($query){
        $query
            ->on('attribute_values.id', '=', 'product_attribute.attribute_value_id')
            ->where('attribute_id', '5');
    })
    ->groupBy('products.id')
    ->orderByDesc('attribute_values.value');

不确定表名。


推荐阅读