使用Pivot的Laravel查询范围

时间:2018-02-27 23:44:00

标签: laravel

我有一个查询范围现在正在检索我想要的正确条目,但我也需要获取数据透视信息。例如:

我的查询是:

public function scopeProgramDate($query, $program, $date)
{
     return $query->whereHas('weeks', function ($q) use( $program, $date ){ 
                $q->where('date', $date); 
                $q->where('program', $program); 
      }); 
}

所以我可以像Workout::programdate( 'skunks', Carbon::today() )->first();一样调用它,它会返回正确的workout。但我希望它包含数据透视表(date, program, warmup)上的条目的透视信息;

如果我这样称呼它Workout::programdate( 'skunks', Carbon::today() )->with('weeks')->first();它会给我与锻炼相关的所有周,我不能使用,因为锻炼可以在同一天用不同的warmpupprogram

有没有办法:

public function scopeProgramDate($query, $program, $date)
 {
     return $query->whereHas('weeks', function ($q) use( $program, $date ){ 
            $q->where('date', $date); 
            $q->where('program', $program); 

     })->withPivot( ['program', 'warmup', 'date'] ); 
  }

所以我可以在workoutweek_workout匹配的date内找到program。然后返回该条目的workoutworkout.pivot.dateworkout.pivot.programworkout.pivot.warmup

1 个答案:

答案 0 :(得分:0)

我最终制作了一个有效的新功能,但我认为这不是正确的方法:

public static function workoutWeek( $date, $program){

            $array = array();

            $skill = DB::table('week_workout')
                        ->where('date', $date )
                        ->where('program', $program )
                        ->first();



            $workout   = Workout::find( $skill->workout_id );

            $array['skill']     =  $skill;
            $array['workout']   =  $workout;

            return $array;
        }

然后将其称为

$training  = Workout::workoutWeek( Carbon::today(), 'training' );