laravel - 过滤不重复的集合

标签 laravel

我有一个像下面这样的 laravel 集合:

[
   {
      "id":2,
      "name":"Product 1",
      "awards":[
         {
            "id":1,
            "name":"Award 1",
            "pivot":{
               "product_id":2,
               "award_id":1
            }
         },
         {
            "id":2,
            "name":"Award 2",
            "description":"Quae sint vero id iste.",
            "pivot":{
               "product_id":2,
               "award_id":2
            }
         },
         {
            "id":3,
            "name":"Award 3",
            "pivot":{
               "product_id":2,
               "award_id":3
            }
         },
      ]
   },
   {
      "id":3,
      "name":"Product 2",
      "awards":[
         {
            "id":2,
            "name":"Award 2",
            "pivot":{
               "product_id":3,
               "award_id":12
            }
         },
         {
            "id":3,
            "name":"Award 3",
            "pivot":{
               "product_id":3,
               "award_id":13
            }
         },
         {
            "id":14,
            "name":"Award 4",
            "pivot":{
               "product_id":3,
               "award_id":14
            }
         },
      ]
   }
]

有没有办法让我得到像下面这样的合集,所有奖项,没有重复:

      "awards":[
         {
            "id":1,
            "name":"Award 1",
            "pivot":{
               "product_id":2,
               "award_id":1
            }
         },
         {
            "id":2,
            "name":"Award 2",
            "description":"Quae sint vero id iste.",
            "pivot":{
               "product_id":2,
               "award_id":2
            }
         },
         {
            "id":3,
            "name":"Award 3",
            "pivot":{
               "product_id":2,
               "award_id":3
            }
         },
         {
            "id":12,
            "name":"Award 2",
            "pivot":{
               "product_id":3,
               "award_id":12
            }
         },
         {
            "id":14,
            "name":"Award 4",
            "pivot":{
               "product_id":3,
               "award_id":14
            }
         },
      ]

我知道 Laravel 集合类有许多方法(如过滤器等),但我正在努力让它们“跨对象”工作——例如这里我有两个我几乎想要的对象

combine('awards')->unique()

...类似的东西。

编辑

我得到的初始数组非常简单,一个盒子包含许多产品,这些产品有奖励,所以我想说,这个盒子共有 x、y、z 奖励。不管怎样,这里是查询(上面是return $box的结果):

$box = Box::with('products.awards')->find($id);

最佳答案

有一种非常简单的方法。

$awardsArray = $products->lists('awards');
$awardsDirty = new Collection($awardsArray);
$awards = $awardsDirty->unique();

关于laravel - 过滤不重复的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707204/

相关文章:

php - 根据其他循环数据显示循环数据 laravel

php - Laravel 同步多对多错误

Laravel 4 模型单元测试与 Codeception - 未找到类 'Eloquent'

php - 带有查询字符串的 Laravel 路由 url

php - 排除 Laravel 从模型结果附加值

php - 在 Laravel 5.5 中使用 Carbon 来比较 2 个日期

php - Laravel groupBy 使用 Carbon - 意外地限制了分组数组的长度

php - 在 Blade 模板中将数字格式设置为 K/M/B

php - Laravel 数据库显示为未配置?

validation - Laravel 验证多个模型