我看了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();