Вы можете иметь представление о том, как добиться этого, попробовав что-то вроде этого:
$collection = collect([
['id' => 1, 'cardId' => 100, 'cardQuantity' => 1234],
['id' => 2, 'cardId' => 100, 'cardQuantity' => 1234],
['id' => 7, 'cardId' => 200, 'cardQuantity' => 1234],
['id' => 8, 'cardId' => 200, 'cardQuantity' => 1234],
]);
$unique = $collection->unique('cardId'); // returns a collection
$unique->transform(function ($item, $key) use ($collection) {
$id = $item['cardId'];
$item['cardQuantity'] = $collection->sum(function ($product) use ($id) {
if($product['cardId'] == $id){
return $product['cardQuantity'];
}
});
return $item;
});
return $unique->all();
В результате этот код возвращает преобразованную уникальную коллекцию:
{
"0": {
"id": 1,
"cardId": 100,
"cardQuantity": 2468
},
"2": {
"id": 7,
"cardId": 200,
"cardQuantity": 2468
}
}
По сути, сначала мы получаем уникальные значения с помощью клавиши cardId
, после чего мы transform
собираем unique
коллекцию, устанавливая ее новые значения (сумму уникальных значений). Вы можете играть и проверить больше способов сделать это. Надеюсь, вы найдете это полезным.