我有一个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
也被修改了。
在不修改原始集合的情况下正确的做法是什么?
答案 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()
方法。