具有多个 ID 的多对多关系

Many to many relationship with multiple ids

我有一个 Route and Terminus 模型。一条路线只能有两个 Terminus,但 Terminus 有很多路线。字段如下:

termini
-id
-lat_long

routes
-id
-main_terminus_id
-auxiliary_terminus_id

我正在使用查询生成器来获取我需要的信息,但我遗漏了 'auxiliary' 总站的详细信息。我的查询如下:

$routes = DB::table('organization_route')
        ->join('routes','organization_route.route_id','=','routes.id')
        ->join('terminals', function ($join){
            $join->on(function($query){
                $query->on('terminals.id', '=', 'routes.mainTerminalId')
                    ->orOn('terminals.id', '=', 'routes.auxiliaryTerminalId');
            });
        })->get(['routes.id','routes.mainTerminalId','routes.auxiliaryTerminalId','routes.distance','terminals.*']);

哪种关系最能说明这一点?如何检索包含所有终点站信息(主要和辅助)的路线?

总站模型

public function mainTerminusRoutes(){
    return $this->hasMany(App\Route::class, 'main_terminus_id', 
       'id');
}

public function auxiliaryTerminusRoutes(){
    return $this->hasMany(App\Route::class, 
       'auxiliary_terminus_id', 'id');
}

路线模型

public function mainTerminus(){
    return $this->belongsTo(App\Terminus::class, 
         'main_terminus_id', 'id');
}

public function auxiliaryTerminus(){
    return $this->belongsTo(App\Terminus::class, 
         'auxiliary_terminus_id', 'id');
}

控制器:获取所有路由(并预先加载关系)

$routes = Route::with(['mainTerminus', 'auxiliaryTerminus'])->get();

您可以通过以下方式访问关系

foreach($routes as $route){
    $m_id = $route->mainTerminus->id;
    $a_id = $route->auxiliaryTerminus->id;
}

return $this->hasMany('App\Comment', 'foreign_key', 'local_key');