我正在尝试更好地使用范围来对特定信息进行更清晰的调用。
目前我有一个weeks
,workouts
和week_workout
表。我正在努力为Carbon->today()
锻炼身体。为此,我需要访问date
表上的week_workout
字段。
week_workout
| week_id | workout_id | date
Workout.php
public function weeks(){
return $this->belongsToMany('App\Week')
->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)
我不确定为什么要寻找枢轴列。文档似乎建议它将在数据透视表中查找日期,如果我加载它与关系,但它似乎我错过了一些东西。
答案 0 :(得分:0)
所以看起来你必须使用whereHas
。我更新了范围,只是采取任何日期,使其更强大:
public function scopeDate($query, $date)
{
return $query->whereHas('weeks', function ($q) use($date){
$q->where('date', $date);
});
}
然后在控制器中:
$workouts = Workout::date( Carbon::today() )->get();