【问题标题】:Laravel count number of Male or Female from a relationship tableLaravel 从关系表中计算男性或女性的数量
【发布时间】:2021-03-19 12:51:10
【问题描述】:

我有以下模型:

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();

【问题讨论】:

  • 你使用的是什么版本的 Laravel?
  • 我使用的是 laravel 5.4

标签: php laravel laravel-5 eloquent eloquent-relationship


【解决方案1】:

上述内容将不起作用,因为 Laravel 期望 gender() 返回 Relation 而不是 Model

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

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

【讨论】:

  • 我认为这应该可行,但我想知道是否像 $count = UserProgram::with('user', 'profile')->where('gender', 'Male')-> count() 会起作用。
  • 我试过这个,但我收到错误 compact(): Undefined variable: operator
  • @FloEspen 如果您只是获得计数,则没有任何理由加载其他关系。我不确定这会给您带来想要的结果。
【解决方案2】:

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

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

【讨论】:

  • gender 不返回关系。
猜你喜欢
  • 2013-06-11
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
相关资源
最近更新 更多