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
- 属性值ID
- product_id
模型AttributeValue结构表:
- ID
- 属性ID
- 价值
In value 可以是数值。请帮我解决这个问题。
解决方案
您应该使用连接:
$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');
不确定表名。
推荐阅读
- git-lfs - Gitkraken,在 OSX 上找不到 Git LFS
- r - R 中的 Punif 和 Quinf 函数
- django - 使导航栏在 url 上处于活动状态,并且任何 url 都跟随它
- laravel - 使用moneyphp从美分中获取美元
- html - Angular:如何获取模板的异步数据
- python - Python ML 模型在 docker 中给出错误的输出
- ruby-on-rails - 确认令牌 自动生成 NIL
- webots - “hoap2”控制器崩溃。在 Webot 模拟器中
- mongodb - 使用带有多个 mongos 的 mongoclient 连接到分片副本 mongo 集群
- php - 无法在codeigniter的json数组中获取索引