Laravel красноречиво говорит о многих отношениях со многими без строгого порядка - PullRequest
0 голосов
/ 26 апреля 2018

Я не знаю, как правильно сформулировать вопрос, и если существует некоторая терминология для этой проблемы.
У меня есть таблица городов и таблица связи между городами:

city1_name   city2_name
Atlanta      New York
Moscow       Madrid
Atlanta      Madrid
Moscow       Tokyo
Tokyo        Atlanta

etc          etc

Таким образом, соединения не повторяются и являются симметричными, и если я хочу получить все соединения одного города, я не могу сделать так:

$this->belongsToMany(self::class, 'city_city', 'city1_name', 'city2_name);

При таком подходе, например, для Атланты, он вернетсяНью-Йорк и Мадрид, но я не вернусь в Токио, который я тоже хочу вернуть.

1 Ответ

0 голосов
/ 26 апреля 2018

После всего, что я пришел к этому решению:

protected function connections1(){
    return $this->belongsToMany(self::class, 'city_city', 'city1_id', 'city2_id');
}

protected function connections2(){
    return $this->belongsToMany(self::class, 'city_city', 'city2_id', 'city1_id');
}

public function getConnectionsAttribute(){
    $conn1 = $this->connections1;
     foreach ($this->connections2 as $conn){
         $conn1->push($conn);
     }
    return ($conn1);
}


$city = City::find('Atlanta');
$city->connections; //Gives respective objects for New York,Madrid and Tokyo.
...