我正在从某个数据范围中选择所有的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
复制相似问题