我需要按某些属性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的结构表:
输入值可以是数字值。 请帮助我解决此问题。
答案 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');
不确定表名。