【问题标题】:Laravel 8 getting count through three linked modelsLaravel 8 通过三个链接模型进行计数
【发布时间】:2021-12-11 14:48:43
【问题描述】:

我有一个简单的 laravel 8 设置,包含三个模型:

  • 学生,属于某个专业并拥有许多组
  • 专业,有很多学生,而且
  • 有很多学生的小组。

小组有一个“course_year”列,它是 1 到 7 之间的整数,包括。 我正在创建一个索引页面来列出所有专业,并且我想显示每年的学生人数。

这里有一个问题 - 因为学生可以属于许多组,一些组可以属于不同的课程年份,我需要计算,但它们也可以属于同一年的多个组,我没有想数数。

结果应该是在 course_year 的所有组中入伍的个别学生的数量,无论他们是否在另一个 course_year 的组中入伍。

感谢所有见解!

【问题讨论】:

  • 你试过官方文档的聚合部分吗? laravel.com/docs/8.x/…您可以在模型上定义计数关系并像其他关系一样加载它们

标签: laravel database eloquent


【解决方案1】:

感谢 ZarkDev 将我指向文档中的正确位置。有点想知道他们周围。我终于在我的主要模型中做到了这一点,并且它有效:

public function students_major_count($major_id, $course_year) {
    $students = Student::withCount([
        'groups' => function ($query) use ($course_year) {
        $query->where('course', $course_year);
    }
    ])->where('major_id', $major_id)->get();
    return $students->where('groups_count', '>', 0)->count();
}

通过这种方式,我计算每个课程每年只参加一次任何数量的小组的每个学生。

我很高兴听到有关优化它的任何其他建议,但它已经足够好。

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 2021-12-24
    • 2016-01-20
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多