返回新收藏而不修改原始收藏

时间:2019-11-01 13:47:01

标签: php laravel-5 collections eloquent

我有一个Laravel集合,我想将其属性值之一修改为负整数。为此,我使用了集合map方法,但它也修改了原始集合。

我的代码:

$modified_revenue_data = $revenue_data->map(function ($item) {
    if ($item->is_claw_back == 1 && $item->claw_back_date != null) {
        return $item->revenue = $item->revenue * -1;
    }

    return $item;
});

我想将新集合存储到$modified_revenue_data中,但是$revenue_data也被修改了。

在不修改原始集合的情况下正确的做法是什么?

1 个答案:

答案 0 :(得分:0)

它不应该更新原始集合。我进行了一些测试,可以确认这是map()方法的行为:

$a = collect([1, 2, 3, 4, 5]);

$b = $a->map(function ($el) {
     return $el * 2; 
});

dd($b);
=> Illuminate\Support\Collection {#3726
     all: [
       2,
       4,
       6,
       8,
       10,
     ],
   }
dd($a);
=> Illuminate\Support\Collection {#3743
     all: [
       1,
       2,
       3,
       4,
       5,
     ],
   }

documentation中也说明了此行为:

  

map()

     

...

     

与大多数其他收集方法一样,地图返回新的收集   实例它不会修改调用它的集合。如果   您要转换原始集合,请使用transform()   方法。