全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何在 Laravel 中按订单状态筛选并统计热销商品

本文介绍如何在 laravel 中通过关联查询,仅统计已“发货”(delivered)状态订单中的商品销量,并获取销量前三的商品列表。

在构建电商后台仪表盘时,常需展示“最畅销商品”,但若直接对 order_details 表聚合统计(如 SUM(quantity)),会忽略订单实际履约状态——例如,待支付、已取消或未发货的订单不应计入真实销售表现。因此,必须将 order_details 与关联的 orders 表进行条件联查,仅纳入 order_status = 'delivered' 的订单数据

✅ 正确实现方式(基于 Eloquent 关系)

假设你的 OrderDetails 模型已正确定义了与 Order 模型的关联(例如 belongsTo(Order::class, 'order_id')),且 Order 模型中 status 字段存储订单状态(值为 'delivered' 等字符串),则可使用 whereHas() 方法高效完成筛选:

$top_sell_items = OrderDetails::with(['product', 'order']) // 预加载 product 和关联 order(推荐使用更语义化的 'order' 而非 'orders')
    ->whereHas('order', function ($query) {
        $query->where('status', 'delivered');
    })
    ->select('product_id', DB::raw('SUM(quantity) as total_quantity'))
    ->groupBy('product_id')
    ->orderBy('total_quantity', 'desc')
    ->take(3)
    ->get();
? 关键点说明: whereHas('order', ...) 确保仅选取所属订单状态为 'delivered' 的明细记录; with(['product', 'order']) 支持后续访问 $item->product->name 或 $item->order->created_at 等字段,提升可扩展性; 列别名建议使用 total_quantity 替代 count,避免与 Eloquent 的 count() 方法语义混淆。

⚠️ 注意事项

  • 关系命名一致性:确保 OrderDetails 模型中定义的关联方法名为 order()(单数,返回 belongsTo),而非 orders()(复数易引发误解)。若当前为 orders(),请先修正模型:
    // 在 OrderDetails.php 中
    public function order()
    {
        return $this->belongsTo(Order::class, 'order_id');
    }
  • 数据库索引优化:为提升查询性能,建议在 orders.status 和 order_details.order_id 字段上建立联合索引:
    CREATE INDEX idx_orders_status_order_id ON orders(status, id);
  • 空结果处理:若无已发货订单,$top_sell_items 将为空集合,前端应做容错渲染(如显示“暂无已发货商品”)。

✅ 最终效果

执行后,$top_sell_items 将是一个包含 3 条 OrderDetails 实例的集合,每条均携带:

  • product_id(商品 ID)
  • total_quantity(该商品在所有已发货订单中的总销量)
  • product(预加载的完整 Product 模型)

你可轻松在 Blade 模板中遍历展示:

@foreach($top_sell_items as $item)
    {{ $item->product->name }} — {{ $item->total_quantity }} 件
@endforeach

此方案兼顾可读性、性能与 Laravel 最佳实践,是处理跨表状态过滤聚合统计的标准解法。


# php  # laravel  # 前端  # ai  # red  # count  # 字符串  # class  # 数据库  # 而非  # 加载  # 暂无  # 遍历  # 推荐使用  # 请先  # 将是  # 你可  # 不应  # 则可 


相关文章: 武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何通过宝塔面板实现本地网站访问?  如何通过云梦建站系统实现SEO快速优化?  建站之星代理商如何保障技术支持与售后服务?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  Swift中循环语句中的转移语句 break 和 continue  如何在服务器上三步完成建站并提升流量?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何用搬瓦工VPS快速搭建个人网站?  如何在IIS中新建站点并解决端口绑定冲突?  开封网站制作公司,网络用语开封是什么意思?  如何正确选择百度移动适配建站域名?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  建站主机是否等同于虚拟主机?  详解jQuery中基本的动画方法  青岛网站建设如何选择本地服务器?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  香港服务器选型指南:免备案配置与高效建站方案解析  h5在线制作网站电脑版下载,h5网页制作软件?  如何用美橙互联一键搭建多站合一网站?  建站之星3.0如何解决常见操作问题?  建站之星2.7模板:企业网站建设与h5定制设计专题  设计网站制作公司有哪些,制作网页教程?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  建站主机类型有哪些?如何正确选型  如何续费美橙建站之星域名及服务?  如何制作算命网站,怎么注册算命网站?  微信推文制作网站有哪些,怎么做微信推文,急?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何快速搭建高效简练网站?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  招商网站制作流程,网站招商广告语?  *服务器网站为何频现安全漏洞?  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站主机选购指南与交易推荐:核心配置解析  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  建站之星后台管理:高效配置与模板优化提升用户体验  如何获取PHP WAP自助建站系统源码?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  高防服务器租用指南:配置选择与快速部署攻略  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  C++如何编写函数模板?(泛型编程入门)  建站主机默认首页配置指南:核心功能与访问路径优化 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。