Laravel跨三表统计指定律师各执业领域案件数量的实现方法
实现代码
public function getCounselPracticeAreas(Request $request) { $counsel_id = $request->route('counsel_id'); // 批量获取该律师所有关联案件编号,仅执行1次查询 $suitNumbers = CounselCase::where('counsel_id', $counsel_id)->pluck('suit_number'); // 数据库层面直接完成匹配、分组统计,仅执行1次查询 $statResult = AnalysisSc::whereIn('suitno', $suitNumbers) ->selectRaw('legal_head as name, count(*) as count') ->groupBy('legal_head') ->get(); // 按要求组装返回结构 $data = [ 'legal_head' => $statResult ]; return response()->json([ "message" => "successful", "data" => $data ]); }
注意事项
- 该方案仅执行2次SQL查询,避免了原写法循环查询产生的N+1性能问题,数据量大时优势明显
- 写法兼容MySQL严格模式,不会出现分组字段不匹配的报错
- 若存在
counsel_cases中的案件编号在analysis_sc无匹配记录的情况,会自动忽略,如需统计空匹配项可额外增加逻辑处理
内容的提问来源于stack exchange,提问作者Korlahwarleh
相关产品推荐
相关产品推荐

