我有三个模型ProductCategory
,Product
和ProductPrice
。我的模特就像这样
ProductCategory.php
public function product()
{
return $this->belongsTo('App\Models\Product');
}
public function category()
{
return $this->belongsTo('App\Models\Category');
}
我的产品型号是这样的
public function category()
{
return $this->hasOne('App\Models\ProductCategory');
}
public function price(){
return $this->hasMany('App\Models\ProductPrice');
}
现在我想获取一个类别的所有产品,并按要求按name/price
对它们进行排序。我对此的疑问是
$query = ProductCategory::with(['product'=>function($q){
$q->whereHas('price',function ($q){
$q->where('quantity','>',0);
$q->where('status',1);
});
}])->whereHas('category',function ($q) use ($cat){
$q->where('category_slug',$cat);
});
switch ($request->get('sort')){
case 'price':
$query->product()->price()->orderBy('amount','asc');
break;
case 'name':
$query->product()->orderBy('title','asc');
break;
}
$data['result']=$query->paginate(30)->toArray();
所以我希望此查询会从类别中返回产品,并按要求按price or name
对其进行排序。但而不是它给我错误说
Call to undefined method Illuminate\Database\Query\Builder::product()
我已经按照这些线程但没有帮助
Laravel orderBy on a relationship
Laravel Eloquent: How to order results of related models?
https://laracasts.com/discuss/channels/eloquent/order-by-on-relationship
还有更多这些是我发现接近我的问题。任何人都可以帮我查询谢谢
答案 0 :(得分:0)
这个问题不能像我发现的那样解决。要解决这个问题,另一种方法是必要的。
这就是我这样做的方式。
$query = Product::with('sizes','images')->whereHas('productCategory',function ($q) use ($cat,$request,$cate){
$q->whereHas('category',function ($q) use ($cat ,$request,$cate){
$q->where('category_slug',$cat);
});
});
$data['result']=$query->get()->toArray();
这很容易分类