我正在从某个数据范围中选择所有的ScheduledPrograms,该数据范围具有属于特定User的Attendees。我想要添加一个筛选器,以只选择SchduledPrograms,其中枢轴字段registered=1
也就是说,我需要为多到多关系的scheduledPrograms->attendees添加一个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')ScheduledProgram模型
public function attendees()
{
return $this->belongsToMany('Attendee', 'prog_bookings')->withPivot('registered','paid');
}发布于 2018-06-15 07:54:13
wherePivot()只能用于belongsToMany实例,但是whereHas()闭包函数接收Builder实例。
因此,您不能在wherePivot()内部使用whereHas()。
发布于 2018-10-16 13:10:22
方法wherePivot用于模型实例,而不是模型查询生成器。
我认为当使用whereHas方法时,pivot表已经有了有力的连接,所以只是在whereHas方法中开始使用它--:
$programs = ScheduledProgram::where('registration_start_date', '<=', $today)
->where('end_date', '>=', $today)
->whereHas('attendees', function($q) use($user)
{
$q
//========= See this: =========
->where('prog_bookings.registered', '1')
->whereHas('user', function($q) use($user){
$q->where('id', $user->id);
});
})
->wherePivot('registered', 1)
->get();发布于 2015-11-09 18:35:16
你试过什么吗?你犯了什么错误?
如果“已注册”字段位于ScheduledPrograms和Atendees关系之间的透视表中,则可以在get()之前添加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);
});
})
->wherePivot('registered', 1)
->get();https://stackoverflow.com/questions/33615462
复制相似问题