具有多个 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');
我有一个 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');