将属性添加到 laravel collection

Adding attributes to laravel collection

我必须为我的 laravel collections 添加一些属性。

我的laravelcollection原属性:

array:2 [▼
    0 => array:20 [▼
        "curr" => "IDR"
        "price" => 5500000.0
        "rate" => 14325.803
        "qty" => 2
    ]
    1 => array:20 [▼
        "curr" => "IDR"
        "price" => 1500000.0
        "rate" => 14325.803
        "qty" => 1
    ]
]

我想添加“数量”属性,它是“价格”乘以“数量”的结果,如下所示:

array:2 [▼
    0 => array:20 [▼
        "curr" => "IDR"
        "price" => 5500000.0
        "rate" => 14325.803
        "qty" => 2
        "amount" => 11000000.0
    ]
    1 => array:20 [▼
        "curr" => "IDR"
        "price" => 1500000.0
        "rate" => 14325.803
        "qty" => 1
        "amount" => 1500000.0
    ]
]

我试图通过 laravel collection 的 put() 方法来完成它,但似乎 each() 方法将删除 collection 实例,所以我不能使用 put() 方法:

$collection->each(function($item) {
    $item->put('amount', $item->price * $item->qty);
});

这个问题的解决方法是什么?

对于这种情况,您不能在 ->each 循环中使用 ->put,因为 ->each 不会通过引用循环项目。所以在循环后对项目的所有修改都会丢失。

您可以将数组映射到 return 您的实际 $item 与额外键 amount 合并。正确的使用方法是->map.

$collection = $collection->map(function($item) {
    return array_merge($item, [
        'amount' => $item->price * $item->qty;
    ]);
});

https://laravel.com/docs/9.x/collections#method-map