我有两个模型Service
和Environment
以及数据透视表environment_service
。
数据透视表具有四列:service_id
,environment_id
,rfs_id
(来自Service表的ID)和rfs_env_id
(来自Environment表的ID)。
一项服务(例如财务系统)在数据透视表中具有多个行,以表示环境(prod,dev,qa)和支持服务(例如DNS,数据库,身份服务等)以及该服务的相关环境ID支持服务。
|---------------------------------------------------|
| service_id | environment_id | rfs_id | rfs_env_id |
|---------------------------------------------------|
| 1 | 1 | 34 | 1 |
| 1 | 1 | 13 | 1 |
| 1 | 1 | 26 | 2 |
| 1 | 1 | 112 | 3 |
| 1 | 1 | 43 | 1 |
| 1 | 1 | 7 | 1 |
|---------------------------------------------------|
目前,我在视图中有一些粗糙的代码可以循环浏览所有行,并检查service_id
和environment_id
上的匹配项,并列出所有支持服务(来自rfs_id列)。我真的很想清理此问题,但无法找出从rfs_id
列中获取与前两列匹配的行的服务对象集合的方法。
服务与环境之间以及服务与自引用依赖关系之间的关系都可以正常工作。正是在尝试将数据透视表属性列作为我正在苦苦挣扎的集合返回时。
这是我当前在视图中使用的代码。
@foreach($environment->services as $rfs)
@php($s = \App\Service::find($rfs->pivot->rfs_id))
@if ($rfs->pivot->service_id === $service->id)
<strong>{{ Html::link(url('/services/'.$s->id.'/'.$rfs->pivot->rfs_env_id),$s->service_short_name.'-'.get_env_name($rfs->pivot->rfs_env_id)) }}</strong>
@endif
@endforeach