【发布时间】:2016-12-20 23:27:06
【问题描述】:
我有 3 个模型:环境、站点和事件。每个都有各自的表格。
我的模型关系定义如下:
环境有很多站点(站点表中的environment_id)
public function sites()
{
return $this->hasMany('App\Site');
}
站点属于一个环境(站点表中的environment_id)并属于许多事件(带有incident_id 和site_id 的incident_site 关系表)
public function environment()
{
return $this->belongsTo('App\Environment');
}
public function incidents()
{
return $this->belongsToMany('App\Incident');
}
事件属于多个站点(incident_site 关系表与incident_id 和site_id)
public function sites()
{
return $this->belongsToMany('App\Site');
}
问题:我正在尝试通过这样的环境模型检索所有站点事件的集合:
$environment->incidents()->count();
到目前为止,我能够让它在控制器中工作的唯一方法是这样的:
$environment->load(['sites.incidents' => function ($q) use ( &$incidents ) {
$incidents = $q->orderBy('id','desc')->get();
}]);
但在应用程序的其他区域使用它并不理想。
问题:如何通过环境模型中的方法使上述关系发挥作用?有没有更简单的方法?
【问题讨论】:
-
其实没有
hasManyThrough()这种关系的方法,不过你可以使用下面的答案来获取功能。
标签: laravel eloquent many-to-many