【问题标题】:Extract property array from Laravel Collection从 Laravel 集合中提取属性数组
【发布时间】:2018-02-28 13:53:22
【问题描述】:

我正在使用 Laravel 5.3,并且我有一个格式如下的集合:

$categories = [
   {
      "id":1,
      "sub_categories":[
         {
            "id":1,
            "category_id":1
         }
      ]
   },
   {
      "id":7,
      "sub_categories":[
         {
            "id":5,
            "category_id":7,
         },
         {
            "id":6,
            "category_id":7
         }
      ]
   }
]

我需要提取所有 sub_categories 数组,但我找不到访问该属性内数据的方法。基于$categories 集合,我希望创建一个具有这种格式的新集合:

[  
   {  
      "id":1,
      "category_id":1
   },
   {  
      "id":5,
      "category_id":7
   },
   {  
      "id":6,
      "category_id":7
   }
]

我尝试将 ma​​ppluck 应用到 $categories,但它检索到一个填充有 null 的数组。

【问题讨论】:

  • $categories->pluck("sub_categories")->flatten(1) 可能会这样做
  • 不...现在它给了我一个用 null 填充的数组。
  • 我尝试了 pluck 并且成功了,您是通过什么方式检索到收藏的?
  • 这样:Category::where('team_id', Auth::user()->current_team_id)->with('subCategories')->get()。你让我尝试使用关系名称的 pluck 方法,它奏效了!谢谢。

标签: php arrays laravel laravel-collection


【解决方案1】:

看起来flatMap 会做你想做的事。我不确定为什么它将项目作为数组返回给回调,但这对我有用...

$categories = collect((object) [
    [
        'id' => 1,
        'sub_categories' => [
            [
                'id' => 1,
                'category_id' => 1
            ]
        ]
    ],
    [
        'id' => 7,
        'sub_categories' => [
            [
                'id' => 5,
                'category_id' => 6
            ],
            [
                'id' => 6,
                'category_id' => 7
            ]
        ]
    ],
]);

dd($categories->flatMap(function($category) {
    return $category['sub_categories'];
}));

【讨论】:

  • flatMap 点赞! TBH 我从未尝试过。很高兴知道它。
【解决方案2】:

pluck 方法成功了。看起来如果您尝试获取的属性已通过 Eloquent 关系 - 急切加载检索到,您必须将关系的名称传递给 pluck

我像这样从数据库中获取我的收藏:

Category::where('team_id', Auth::user()->current_team_id)->with('subCategories')->get()‌​;

所以我不得不将 pluck 方法称为 $categories->pluck('subCategories'); 而不是 $categories->pluck('sub_categories');

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 2019-01-12
    • 2018-09-22
    • 2016-11-19
    • 2014-01-22
    • 2016-11-19
    • 2016-03-06
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多