laravel范围查询where pivot



我正在尝试更好地使用范围来对特定信息进行更清洁的调用。

目前,我有一个weeksworkoutsweek_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();

最新更新