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

Laravel Builder实现关联表多统计查询问题求助

解决方案

直接用Illuminate\Database\Query\Builder(即DB门面的查询构造器)实现,核心通过左关联邀请表+聚合函数分别统计两项数据:

use Illuminate\Support\Facades\DB;

$userStats = DB::table('users')
    ->leftJoin('user_invitations', 'users.id', '=', 'user_invitations.sender_id')
    ->groupBy('users.id', 'users.name') // 根据需求添加users表需展示的字段
    ->select([
        'users.id',
        'users.name',
        DB::raw('COUNT(user_invitations.id) as total_invitations'), // 发送的邀请总数
        DB::raw('COUNT(user_invitations.recipient_user_id) as registered_invitations') // 邀请带来的注册用户数
    ])
    ->get();

关键细节说明:

  • 左关联(leftJoin):保证没发送过邀请的用户也能被统计到(两项数值均为0)
  • COUNT(user_invitations.id):统计所有发送的邀请——邀请表的id为每条邀请的唯一标识,只要存在就计入总数
  • COUNT(user_invitations.recipient_user_id):仅统计完成注册的邀请——假设recipient_user_id在用户注册后会填充为新用户ID,未注册时为null,COUNT函数会自动忽略null值
  • groupBy约束:必须包含users表中所有非聚合查询字段,避免SQL模式报错

如果你的user_invitations表用其他字段标记注册状态(比如is_registered布尔字段),可以把注册数统计改成:

DB::raw('SUM(CASE WHEN user_invitations.is_registered = 1 THEN 1 ELSE 0 END) as registered_invitations')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:55:14