我不知道如何以正确的方式形成问题,并且是否存在此问题的某种术语。
我有一个城市和城市之间的联系表:
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);
以这种方法,例如,亚特兰大将返回纽约和马德里,但不会返回东京,我也希望返回。
毕竟我已经提出了这个解决方案:
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.