【问题标题】:Search many level Eloquent Collection搜索多级 Eloquent 合集
【发布时间】:2021-11-03 22:44:01
【问题描述】:

如果我有一个包含多个级别的集合,是否有任何技巧可以找出我需要在where() 中输入的内容才能通过它进行搜索?这是我到目前为止所拥有的,但我从中得到了一个空数组。 $contacts->where('contacts.tags.id', $tag->id) 我也试过contacts.tags.tags.id 如果我运行dd($contacts),这就是我得到的结果@

【问题讨论】:

标签: php laravel eloquent collections eloquent-relationship


【解决方案1】:

您可能正在寻找 Eloquent - Eager Loading With Constraints。

$id = 'Your ID you are searching for';

$contacts= App\Models\Contact::with(['tags' => function ($query) {
    $query->where('id', '=', $id');
}])->get();

显示所有标签 = id 的联系人。如果它只是一个你可以切换 ->get() 为 ->first() 以返回对象而不是集合(数组)

【讨论】:

  • 谢谢!我已经迫不及待地加载了tags,所以它们处于tags 关系中,如图所示。我无法按链中更高的标签进行过滤。现在我想运行$contacts->where('contacts.tags.id', $tag->id) 之类的东西来访问标签关系。这一切都在数组中,我只是不知道如何访问它,但是对于在集合中使用 where 来说可能太复杂了。
  • 再次查看您的代码后。它将提供所有联系人,它过滤的唯一内容是标签关系,还是我错了?我想按标签过滤联系人,所以也许我需要一个 whereHas 或其他东西。
  • 我认为它应该只返回关系标签 id 与 id 匹配的联系人。如果不是,您可以尝试 whereHas(检查此线程)stackoverflow.com/questions/30231862/…
  • 谢谢!我已经迫不及待地将所有标签加载到 $contacts 中,然后循环通过 $contacts 几次,所以我想避免进行更多的数据库查询,但是如果我无法使用集合中的 where 到达标签 id,也许有 whereHas也用于收藏。我真正想做的是按标签分组,但我没有让它工作。我想要的最终结果是一个标签列表,每个标签下都有各自的联系人。
  • 如果你的标签反转->联系人设置,你不能做$tags = Tag::with('contacts')->find($id);然后你得到标签和与标签相关的联系人?
猜你喜欢
  • 2014-07-31
  • 2021-04-17
  • 1970-01-01
  • 2016-02-12
  • 2018-09-08
  • 2014-10-25
  • 2019-08-02
  • 2013-12-02
  • 2020-01-16
相关资源
最近更新 更多