【问题标题】:Laravel - how to list all keys on relation in collection?Laravel - 如何列出集合中关系的所有键?
【发布时间】:2018-01-01 16:46:07
【问题描述】:

我有类似的东西:

$categories = Categories::with('sections')->get();

它给了我那个收藏:

正如您在图片上看到的,我可以通过以下方式访问所有“Y”

dd($categories->pluck('id'));

这给了我我想要的,这个集合中所有项目的 ID

但问题是

现在如何获取 "Y" 的所有 ID?这是属于这些项目中的每一个的关系属性

而且我不想通过学习来做到这一点。

但是必须有更好的方法,更快。

如何在不一遍又一遍地寻找这个集合的情况下实现它:)?

【问题讨论】:

标签: php laravel collections frameworks


【解决方案1】:

您可以使用以下示例使用点符号简单地检索部分中的所有 id:

你有:

$categories = Categories::with('sections')->get();

获取所有部分的 id 将是:

$sections = $categories->pluck('sections.*.id')->flatten()->values();

这将根据深度访问集合,sections-all-ids。并返回一个重新索引的底层数组。

如果你只需要部分,你可以停在部分。

PS:正如@Jerodev 提到的,集合只是以更有用的方式包装php 数组,而底层的pluck 和其中许多操作都使用循环。

希望对你有帮助

【讨论】:

    【解决方案2】:

    那么,如果我理解正确,您想要该集合中类别的所有部分 ID?

    您可以使用带有这些类别 ID 的 whereIn 使用第二个查询。此外,不再需要 with 函数。

    $categories = Categories::get();
    $sections = Section::whereIn('category_id', $categories->pluck('id'))->get();
    

    【讨论】:

    • 不能在没有 foreaching 的情况下使用 Categories::with('sections') + 来完成吗?
    • 您可以使用集合来合并类别的关系,但在内部,仍然使用 foreach 循环。所以不,我认为没有其他方法。请记住,由于我删除了with,所以我的回答不会比您希望它的工作方式更多的查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2021-09-11
    • 2016-01-22
    • 1970-01-01
    • 2012-02-10
    相关资源
    最近更新 更多