Laravel范围查询wherePivot

时间:2018-02-19 21:15:54

标签: php laravel

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

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

我不确定为什么要寻找枢轴列。文档似乎建议它将在数据透视表中查找日期,如果我加载它与关系,但它似乎我错过了一些东西。

1 个答案:

答案 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();