Phi*_*hil 4 laravel eloquent laravel-4
我选择全部ScheduledPrograms从具有一定范围内的数据Attendees属于某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();
Run Code Online (Sandbox Code Playgroud)
楷模
Attendee->belongsTo('User')
->belongsToMany('ScheduledPrograms')
User->hasMany('Attendee')
ScheduledProgram->belongsToMany('Attendee')
Run Code Online (Sandbox Code Playgroud)
` ScheduledProgram模型
public function attendees()
{
return $this->belongsToMany('Attendee', 'prog_bookings')->withPivot('registered','paid');
}
Run Code Online (Sandbox Code Playgroud)
小智 6
wherePivot()只能用于belongsToMany实例,但是whereHas()闭包函数Builder改为接收实例。
所以你不能使用wherePivot()inside whereHas()。
方法wherePivot适用于模型实例,不适用于模型查询生成器。
我认为在使用whereHas方法时,数据透视表已经被雄辩地连接了起来,因此只需在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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5806 次 |
| 最近记录: |