Laravel:如何通过Eloquent关联关系查询带订单数的用户
实现方法
Laravel 提供了withCount方法专门用于关联模型的数量统计,无需手动编写关联查询逻辑,具体用法如下:
基础用法
查询所有用户数据,同时返回每个用户关联的订单总数:
$users = \App\Models\User::withCount('orders')->get();
执行查询后,每个用户实例会自动生成orders_count属性,直接访问即可获取对应用户的订单数量:
// 遍历输出 foreach ($users as $user) { echo $user->orders_count; }
带条件的统计
如果需要统计满足特定条件的订单(比如已支付的订单),可以给withCount传入闭包添加查询条件:
$users = \App\Models\User::withCount([ 'orders' => function ($query) { $query->where('pay_status', 1); // 只统计支付成功的订单 } ])->get();
基于统计字段排序
可以直接用生成的orders_count字段对查询结果排序,比如按订单量从高到低返回用户:
$users = \App\Models\User::withCount('orders') ->orderBy('orders_count', 'desc') ->get();
单个用户查询
查询单个用户时也可以用同样的方法获取订单数:
$user = \App\Models\User::withCount('orders')->find($userId); echo $user->orders_count;
内容的提问来源于stack exchange,提问作者Manole Răzvan Ionuț
相关产品推荐
相关产品推荐

