按关系排序laravel

时间:2018-12-13 07:41:03

标签: php 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();

但这不起作用。

产品属性模型的结构表:

  • id
  • attribute_value_id
  • product_id

模型AttributeValue的结构表:

  • id
  • attribute_id

输入值可以是数字值。 请帮助我解决此问题。

1 个答案:

答案 0 :(得分:0)

您应该使用联接:

$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');

不确定表名。