У меня есть данные для работы: у меня есть таблица, содержащая всех спортсменов, которая называется sportevents
.
id ....
name ....
....
У этих спортсменов есть сводная таблица, в которой определяются отношения к тому же самому спортсмену, произошедшему в предыдущем году и в следующем году.Немного запутанный дизайн, но вот таблица, называемая событиями: я пытаюсь объяснить с 2018 и 2019 годами
id ....
event1: sportevent_id of 2019 event
event2: sportevent_id or 2018 event
....
Мой подход заключается в создании модели с именем Eventrelation
со следующими отношениями:
public function previous(){
return $this->belongsTo('App\Sportevent','event1','id' );
}
public function next(){
return $this->belongsTo('App\Sportevent','event2','id' );
}
и в моей Sportevent
модели я бы сделал следующее:
public function previousEvent(){
return $this->hasOne('App\Eventrelation','event2','id' );
}
public function nextEvent(){
return $this->hasOne('App\Eventrelation','event1','id');
}
Хотя это сработает, я не думаю, что это правильный способ сделать это.Я настроил другие отношения с помощью сводной таблицы, но эта, кажется, немного сложнее, учитывая существующую структуру данных и отношение к той же модели.Любой совет будет высоко ценится.
ОБНОВЛЕНИЕ
Я заставил его работать так, как я предложил выше, причина, почему я предпочел бы более чистую версию, состоит в том, чтобы уменьшитькод (это часть того, чтобы быть чище :-)).Итак, вот как я называю эти отношения и как я бы скорее назвал их:
$previousEvent = $thisEvent->previousEvent ? $thisEvent->previousEvent->previous : null;
$nextEvent = $thisEvent->nextEvent ? $thisEvent->nextEvent->next : null;
// Better would be:
$previousEvent = $thisEvent->previousEvent;
$nextEvent = $thisEvent->nextEvent;