thinkphp聚合查询使用模型类的静态方法,如 count() 和 sum(),直接传入字段名即可获取结果。关联统计则通过模型定义中的 relationcount 或自定义聚合方法实现,利用 withaggregate 加载数据。

基础聚合查询如何执行
基础聚合查询通过调用模型类的静态方法完成,例如统计用户总数或计算积分总和。这些方法支持链式调用,可以结合条件过滤。

use think\facade\Db;
// 统计用户表总记录数
$count = Db::name('user')->count();
// 计算用户表中所有用户的积分总和
$sum = Db::name('user')->sum('score');
// 带条件的聚合查询
$totalScore = Db::name('user')
->where('status', 1)
->sum('score');上述代码展示了三种常见的聚合操作:无参数调用返回行数,指定字段返回该字段的总和,结合 where 可实现条件筛选后的聚合计算。
立即学习“PHP免费学习笔记(深入)”;
关联统计如何实现
关联统计需要在模型中定义关联关系,并使用 withAggregate 方法加载统计数据。这种方式适用于一对多或多对多关系的统计需求。

// 在 User 模型中定义关联
public function orders()
{
return $this->hasMany(Order::class);
}
// 查询用户及其订单总金额
$users = User::withAggregate('orders', 'amount', 'total_amount')
->select();
foreach ($users as $user) {
echo $user->nickname . ': ' . $user->total_amount . PHP_EOL;
}此示例中,withAggregate 的第一个参数是关联名称,第二个参数是要聚合的字段,第三个参数是结果字段别名。最终每个用户对象都会包含一个 total_amount 属性,表示其所有订单的金额总和。
当关联为空时聚合结果如何处理
当关联数据为空时,聚合结果默认返回零值。例如,若某用户没有任何订单,则其 total_amount 为 0。这种行为符合预期,无需额外处理。



















