Как в laravel сложить коллекции суммируя значения с условием?

В Laravel можно сложить значения коллекций с помощью метода sum(), при этом задавая необходимое условие с помощью методов filter() или where(). Для решения этой задачи есть несколько подходов, которые я рассмотрю ниже.

Первый подход - использование методов filter() и sum() в цепочке вызовов. Для начала, вы можете использовать filter() для отфильтровки коллекции по определенному условию, а затем применить sum() для вычисления суммы значений.

$collection = collect([
    ['name' => 'Apple', 'quantity' => 2],
    ['name' => 'Orange', 'quantity' => 5],
    ['name' => 'Banana', 'quantity' => 3],
]);

$total = $collection->filter(function ($item) {
    // Определяем условие: суммировать только элементы, количество которых больше 2
    return $item['quantity'] > 2;
})->sum('quantity');

// Результат: $total = 8

Второй подход - использование метода reduce(). Метод reduce() позволяет итеративно пробегаться по коллекции и накапливать результаты сложения.

$total = $collection->reduce(function ($carry, $item) {
    // Определяем условие: суммировать только элементы, количество которых больше 2
    if ($item['quantity'] > 2) {
        return $carry + $item['quantity'];
    }
    return $carry;
});

// Результат: $total = 8

Третий подход - использование метода sum() с использованием замыкания (closure). Замыкание позволяет определить условие внутри функции sum(), используя анонимную функцию.

$total = $collection->sum(function ($item) {
    // Определяем условие: суммировать только элементы, количество которых больше 2
    if ($item['quantity'] > 2) {
        return $item['quantity'];
    }
    return 0;
});

// Результат: $total = 8

Все три подхода являются рабочими и возможно использовать любой из них в зависимости от конкретных требований и предпочтений.