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

Laravel中如何根据条件对数据透视表关联字段求和

解决Laravel中仅统计付费关联课程的费用总和问题

嘿,作为Laravel新手,这种涉及多表关联的统计需求确实容易让人摸不着头脑,我来给你两种实用的实现方式,你可以根据自己的习惯选择~

方法一:使用Eloquent模型关联(推荐,代码更优雅)

首先,我们需要给对应的表创建模型并建立关联关系:

  1. 创建Course模型(如果还没创建的话):
// app/Models/Course.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Course extends Model
{
    // 如果你的表名不是默认的复数courses,需要指定表名
    // protected $table = 'Course';

    // 关联Courses_members表
    public function courseMembers()
    {
        return $this->hasMany(CoursesMembers::class, 'course_id');
    }
}
  1. 创建CoursesMembers模型:
// app/Models/CoursesMembers.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class CoursesMembers extends Model
{
    // 指定表名(因为模型名和表名的驼峰转下划线是courses_members,刚好匹配,也可以省略)
    protected $table = 'courses_members';
    // 如果表没有created_at和updated_at字段,需要关闭自动时间戳
    public $timestamps = false;
}
  1. 执行求和操作:
    我们用whereHas方法筛选出至少有一个付费成员的课程,然后对course_fee求和:
// 在控制器或者需要的地方调用
use App\Models\Course;

$totalPaidFee = Course::whereHas('courseMembers', function ($query) {
    // 筛选付费状态为1的关联记录
    $query->where('paid', 1);
})->sum('course_fee');

方法二:使用查询构造器(快速实现,无需模型关联)

如果你暂时不想创建模型或者需要快速写查询,可以直接用DB门面:

注意:这里要区分两种统计场景

  • 场景1:统计所有有至少一个付费成员的课程总费用(每个课程只算一次)
    如果同一个课程有多个付费成员,我们需要避免重复计算该课程的费用,所以要加上distinct:
use Illuminate\Support\Facades\DB;

$totalPaidFee = DB::table('courses')
    ->join('courses_members', 'courses.id', '=', 'courses_members.course_id')
    ->where('courses_members.paid', 1)
    ->distinct('courses.id') // 确保每个课程只被统计一次
    ->sum('courses.course_fee');
  • 场景2:统计所有付费记录对应的课程费用总和(每个付费成员对应一次课程费用,即总营收)
    如果需要统计每一笔付费对应的课程费用总和(比如一个课程有3个付费成员,就加3次该课程的fee),直接去掉distinct即可:
$totalRevenue = DB::table('courses')
    ->join('courses_members', 'courses.id', '=', 'courses_members.course_id')
    ->where('courses_members.paid', 1)
    ->sum('courses.course_fee');

小提示

  • 记得根据你的实际表名调整代码中的表名(比如你的Course表如果是大写开头的Course,需要在模型里指定protected $table = 'Course')
  • 可以用dd($totalPaidFee)来打印结果,验证是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:27:44