Laravel 计算关系中男性或女性的数量 table

Laravel count number of Male or Female from a relationship table

我有以下型号:

UserProgram user_id, program_id.

User

Profile, user_id, gender

Program

我的 UserProgram 模型中有一个 function gender

public function gender()
{
  $gender = "N/A";
  $user = User::find($this->user_id);
  if (!empty($user)) {
    $profile = Profile::where('user_id',$user->id)->first();
    if (!empty($profile)) {
        $gender = $profile->gender;
    }
  }
  return $gender;
}

现在我想 运行 一个查询,计算我有多少男性或女性参加一个特定的节目。 我希望能够做这样的事情。

$male_count = UserProgram::with(‘gender)->where([

  ['program_id',104],[‘gender’,’Male’]

])->count();

如果您在 运行 中的查询更改为

$male_count = UserProgram::withCount('gender')->where([['program_id', 104], ['gender', 'Male']])->get();

以上不会工作,因为 Laravel 将期望 gender() 到 return 一个 Relation 而不是 Model

假设您在 UserProgram 模型中有一个 user 关系,并且在您的 user 模型中有一个 profile 关系,您可以使用 whereHas:

$count = UserProgram::where('program_id', 104)
    ->whereHas('user.profile', function ($query) {
        $query->where('gender', 'Male');
    })
    ->count();