如何在laravel中订购相关模型的结果?

时间:2018-04-10 10:07:25

标签: php laravel laravel-5 eloquent

我有三个模型ProductCategoryProductProductPrice。我的模特就像这样

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

还有更多这些是我发现接近我的问题。任何人都可以帮我查询谢谢

1 个答案:

答案 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();

这很容易分类