【问题标题】:sort by relation laravel按关系排序 laravel
【发布时间】:2019-05-14 09:20:13
【问题描述】:

我需要按特定属性 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();

但这不起作用。

模型产品属性结构表:

  • 身份证
  • attribute_value_id
  • product_id

模型AttributeValue结构表:

  • 身份证
  • attribute_id
  • 价值

输入值可以是数值。 请帮我解决这个问题。

【问题讨论】:

  • 您需要在关系上使用 join 而不是那样加载它,现在您订购的是关系而不是“产品”。

标签: php laravel


【解决方案1】:

你应该使用连接:

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

不确定表名。

【讨论】:

    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 2021-01-25
    • 2014-06-25
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2019-06-17
    相关资源
    最近更新 更多