laravel - 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');
});
但它没有奏效
任何想法?谢谢
更新错误:
解决方案
您需要使用with()
添加关系数据whereHas()
它只是为了过滤它不添加新键
例子
$products->with(['order_items'=> function ($q) {
$q->select('product_id')->groupBy('product_id')->orderByRaw('SUM(quantity) DESC')->limit(2)->get();
}]);
推荐阅读
- python - Python - 下载包含在 JQueryFileTree 中的 PDF
- python - 如何摆脱包含零的numpy“带”
- php - 我想将我的数组值与 php 表中的列值匹配
- javascript - 速度控制一个 requestAnimationFrame 循环
- mysql - 从 MySQL 表中选择一行或多行并从每一行中更新列
- javascript - array.split("stop here") 数组到 javascript 中的数组数组
- flutter - 卡片中的甜甜圈图
- node.js - 运行 firebase Deploy -Flutter -Firebase 时在错误的路径中生成 Functions 文件夹
- python - 使用 Shapely 有效地计算列表中每个多边形与另一个列表中多边形的交叉点
- html - 预填表单时如何重置输入日期值