我正在从某个数据范围中选择所有ScheduledPrograms
,其中包含属于某个用户
的参加者
。我想添加一个过滤器以仅选择数据透视字段 registered=1
SchduledPrograms
即我需要为多对多关系 scheduledPrograms->attendees
添加 wherePivot('registered', 1)
。我该怎么做?我的思绪被所有的 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
而是实例。
因此您不能在 whereHas()
中使用 wherePivot()
。
关于Laravel:whereHas->WhereHas->Where 查询。需要添加wherePivot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33615462/