Laravel 5.3使用模型进行雄辩的3表连接

时间:2017-02-21 12:30:28

标签: laravel model eloquent

我看了this帖子有帮助,但需要更多指导。

我需要一组特定$batteryid(在结果上)和特定$age(在测试模型上)和特定$gender(来自运动员)的结果。每项测试属于一名运动员。每个测试都有很多结果。

型号电池:

class Battery extends Model{
    public function results(){
        return $this->hasMany('App\Result');
    }    
}

模型结果:

class Result extends Model{
    public function test(){
        return $this->belongsTo('App\Test', 'test_id');
    }

    public function battery(){
        return $this->belongsTo('App\Battery', 'battery_id');
    }    
}

模型测试:

class Test extends Model{
    public function athlete(){
        return $this->belongsTo('App\Athlete', 'athlete_id');
    }

    public function results(){
        return $this->hasMany('App\Result');
    }
}

我通过以下方式得到了正确的结果,但这是两个问题:

$tests = Test::whereHas('Athlete', function($query) use($gender){
                $query->wheregender($gender);
           })->where('age', $age)->get();

$test_ids = $tests->pluck('id');
$results = Result::where('battery_id', '=', $battery)
          ->whereIn('test_id', $test_ids)
          ->get();

我想使用模型方法,但我完全陷入困境。 test.age无法识别,也不确定如何从运动员模型中获得年龄。我的尝试:

            $results = Result::with('test')
            ->where('test.age', '=', $age)
            ->join('batteries', 'batteries.id', '=', 'test.battery_id')
            //->where('test->athlete().gender', '=' $gender)
            ->where('battery_id', '=', $battery)
            ->get(); 

0 个答案:

没有答案