You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中使用loadSum关联查询,如何仅返回统计结果?

解决Laravel中loadSum仅返回统计字段的问题

方案一:从已加载的模型中提取指定字段

直接利用Laravel模型的only()方法,从加载完统计字段的用户模型中筛选出需要的统计属性:

// 合并两个loadSum调用,一次加载两个统计字段
$user = auth()->user()->loadSum('results', ['total_questions', 'correct_answered']);
// 仅提取统计字段
$stats = $user->only(['results_sum_total_questions', 'results_sum_correct_answered']);

执行后$stats就是你期望的结果:

[
    "results_sum_total_questions" => "156",
    "results_sum_correct_answered" => "35"
]

方案二:直接查询统计数据(更高效)

如果不需要用户模型的其他数据,直接通过关联查询统计,避免加载整个用户模型:

$stats = auth()->user()->results()
    ->selectRaw('SUM(total_questions) as results_sum_total_questions, SUM(correct_answered) as results_sum_correct_answered')
    ->first()
    ->toArray();

这个方法直接对关联的results表执行聚合查询,返回结果仅包含统计字段,性能更优。

你之前的代码无效原因

collect(auth()->user())把单个模型实例包装成了仅含一个元素的集合,map遍历后得到的是包含单个元素的集合而非目标数组,且你只处理了一个统计字段,未覆盖第二个。

内容的提问来源于stack exchange,提问作者MH Raihan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:55:20