我正在尝试更好地使用范围来对特定信息进行更清洁的调用。
目前,我有一个weeks
,workouts
和week_workout
表。我正在尝试为Carbon->today()
锻炼。为此,我需要访问week_workout
表上的date
字段。
week_workout
| week_id | workout_id | date
锻炼。php
public function weeks(){
return $this->belongsToMany('AppWeek')
->withPivot( ['program', 'warmup', 'date'] )
->orderBy('date', 'asc');
}
public function scopeToday($query)
{
return $query->with('weeks')->wherePivot('date', Carbon::today());
}
控制器
$workouts = Workout::today()->get();
When I do this I get `Column not found: 1054 Unknown column 'pivot' in 'where clause' (SQL: select * from `workouts` where `pivot` = date)
我不确定为什么它寻找枢轴列。文档似乎建议如果我加载了该关系,它将在枢轴表中寻找日期,但看来我缺少一些东西。
,因此看起来您必须使用whereHas
。我更新了范围,以使任何日期更强大:
public function scopeDate($query, $date)
{
return $query->whereHas('weeks', function ($q) use($date){
$q->where('date', $date);
});
}
然后在控制器中:
$workouts = Workout::date( Carbon::today() )->get();