首页 > 解决方案 > Laravel 中的 OrderByRaw

问题描述

我正在制作一个过滤产品的应用程序

我想将此查询块添加到我的$products = $products-> newQuery();

我正在使用$products = $products-> newQuery();因为我正在使用过滤器进行查询。例子:

$products = $products->newQuery();

  if ($request->has('brand') && !empty($brand)) {
            $products->where('brand', '=', $brand);
        }

        if ($request->has('size') && !empty($size)) {
            $products->whereHas('stocks', function($query) use ($size) {
                $query->where('size', '=', $size);
            });
        }

我想添加这个查询

 $best_sellers = OrderItem::select('product_id')->groupBy('product_id')->orderByRaw('SUM(quantity) DESC')->limit(2)->get();

我以前在另一种方法中使用过它,它可以工作,但我不知道如何集成它

我试过了:

$products->whereHas('order_items', function($query) {
                        $query->select('product_id')->groupBy('product_id')->orderByRaw('SUM(quantity) DESC');

});

但它没有奏效

任何想法?谢谢

更新错误:

在此处输入图像描述

标签: laraveleloquent

解决方案


您需要使用with()添加关系数据whereHas()它只是为了过滤它不添加新键

例子

$products->with(['order_items'=> function ($q) {
    $q->select('product_id')->groupBy('product_id')->orderByRaw('SUM(quantity) DESC')->limit(2)->get();
}]);

推荐阅读