我正在从具有属于某个 ScheduledProgramsAttendees 的某个数据范围中选择所有 User 。我想添加一个过滤器以仅选择数据透视字段 SchduledPrograms 所在的 registered=1
IE。我需要为多对多关系 wherePivot('registered', 1) 添加一个 scheduledPrograms->attendees 。我该怎么做?我的头脑被所有的 where 子句打乱了。

$programs = ScheduledProgram::where('registration_start_date', '<=', $today)
              ->where('end_date', '>=',  $today)
              ->whereHas('attendees', function($q) use($user)
              {
                  $q->whereHas('user', function($q) use($user){
                      $q->where('id', $user->id);
                  });
               })->get();

模型
Attendee->belongsTo('User')
        ->belongsToMany('ScheduledPrograms')

User->hasMany('Attendee')

ScheduledProgram->belongsToMany('Attendee')

`
计划程序模型
  public function attendees()
  {
    return $this->belongsToMany('Attendee', 'prog_bookings')->withPivot('registered','paid');
  }

最佳答案

wherePivot() 只能用于 belongsToMany 实例,但 whereHas() 闭包函数接收 Builder 实例。

所以你不能在 wherePivot() 中使用 whereHas()

关于Laravel:whereHas->WhereHas->Where 查询。需要添加wherePivot,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33615462/

10-09 08:15