У меня есть проект Laravel 7 и эта структура базы данных:
races participants bibs coords
------- -------------- ------ --------
id id id id
race_id bib_id
bib_id [...]
Отношения следующие:
1 race => N participants ( races.id = participants.race_id )
1 participant => 1 bib ( participants.bib_id = bibs.id )
1 bib => N coords ( bibs.id = coords.bib_id )
Это также означает, что: participants.bib_id = coords.bib_id
Я хочу получить все координаты, относящиеся к определенной c расе. Я использовал построитель запросов следующим образом:
class Race extends Model
{
public function getCoords()
{
return Coord::join('participants', 'participants.bib_id', '=', 'coords.bib_id')
->where('participants.race_id', $this->id)->select('coords.*')->get();
}
}
Здесь я могу это сделать:
$coords = Race::find(1)->getCoords();
Он работает, как ожидалось, но я ищу способ сделать он использует Eloquent, чтобы было легче связать с большим количеством отношений и прочего.
Я пробовал много вещей с belongsToMany
и hasManyThrough
, но ничего не работало. Интересно, возможно ли это вообще?