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
相关产品推荐
相关产品推荐

