【问题标题】:How to exclude certains columns while using eloquent | Laravel如何在使用 eloquent 时排除某些列拉拉维尔
【发布时间】: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-&gt;hotels-&gt;pluck('id'))-&gt;get() 您可以尝试类似的方法,而是在查询级别排除它们?或者如果你有 2 个集合,你可以在它们之间进行相交
  • 这正是我想要的。非常感谢。

标签: php laravel


【解决方案1】:

您有一个选择是在查询级别将您不想要的酒店排除在列表中:

Hotel::whereNotKey($group->hotels->modelKeys())->get();

【讨论】:

  • 我的错,不,你已经这样做了这个答案。非常感谢!
  • @vedat 你的意思是如果你有 2 个集合?您实际上可以在它们之间进行“差异”以仅获得两者之间的差异,但这意味着加载这两个集合以基本上只过滤掉一个
猜你喜欢
  • 2018-05-10
  • 2014-06-30
  • 2022-11-30
  • 2017-09-18
  • 1970-01-01
  • 2014-11-12
  • 2020-03-29
  • 1970-01-01
相关资源
最近更新 更多