У меня есть следующая настройка таблицы базы данных в существующем проекте Laravel, над которым я начал работать:
sports
id
name
lines
id
sport_id - Foreign Key (lines_sport_id_foreign)
bet_id - Foreign Key (lines_bet_id_foreign)
bets
id
stake
С отношениями, настроенными так:
Спорт. php
public function lines()
{
return $this->hasMany('App\Line');
}
Линия. php
public function bet()
{
return $this->belongsTo('App\Bet');
}
public function sport()
{
return $this->belongsTo('App\Sport');
}
Ставка. php
public function lines()
{
return $this->hasMany('App\Line');
}
Теперь мне нужно создать связь между Sport
и Bet
. Специально для
- Получить все ставки на спорт (спорт-> ставки)
- А затем также иметь возможность сортировать виды спорта по наибольшим ставкам (из колонки ставок на ставки)
Я пытался использовать метод Laravel hasManyThrough
, например, в Sport
public function bets()
{
return $this->hasManyThrough('App\Bet', 'App\Line');
}
Но по понятным причинам я получаю ответ
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'bets.line_id' in 'on clause' (SQL: select `bets`.*, `lines`.`sport_id` as `laravel_through_key` from `bets` inner join `lines` on `lines`.`id` = `bets`.`line_id` where `lines`.`sport_id` = 1)
Если бы мне нужно было позвонить App\Sport::find(1)->bets
, так как это предполагает связь между lines
и bets
в таблице bets
, а не в таблице lines
, как в настоящее время (я не могу изменить существующую структуру )
В любом случае можно ли получить все ставки на спорт по линиям $sport->bets
А затем, во-вторых, с этой настройкой, затем отсортировать все спорт у колонки ставок на столе ставок ? (в идеале по направлениям $sport->bets->orderBy('stake', 'desc')
Возможно ли это?