【发布时间】:2021-06-22 03:56:43
【问题描述】:
我有一个小组表。我的主桌。所以我有 group_hotels 表,这个表是一个数据透视表。 (id, group_id, hotel_id)
现在在我的刀片组编辑页面中,我想在添加数据透视表之前列出如下代码: 我的组模型:
public function hotels(){
return $this ->belongsToMany('App\Models\Hotel','group_hotels');
}
我的控制器:
$group = Group::find($id);
$hotels=Hotel::all();
我的刀片酒店 select2 字段:
@foreach($hotels as $hotel)
<option value="{{$hotel->id}}">{{$hotel->name}}</option>
@foreach ($group->hotels as $item)
<option value="{{$item->id}}">{{$item->name}}</option>
@endforeach
@endforeach
这样的输出:http://prntscr.com/10v13ed
现在我想做的是,在我的 group_hotels 数据透视表中,如果酒店 id 存在于 group_hotels 中,除了数据透视表中的 id 什么都没有出现在酒店表中。
简而言之:如果 group_hotels 表中的 hotel_id 部分出现在我的酒店表中,我不想在酒店变量中调用它。
【问题讨论】:
-
这有点难以理解您在这里实际要求的内容...您想要迭代所有酒店,但如果当前迭代的酒店在当前组酒店列表中,则将其从您的输出中排除(不要让它成为一个选择选项)?
-
@lagbox 如果 group_hotels 数据透视表有一个hotel_id 是关系是好的,我想在酒店表中排除这个关系酒店ID。
-
Hotel::whereKeyNot($group->hotels->pluck('id'))->get()您可以尝试类似的方法,而是在查询级别排除它们?或者如果你有 2 个集合,你可以在它们之间进行相交 -
这正是我想要的。非常感谢。