Як вилучити послідовні дані за допомогою takeWhile у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 27 грудня, 2024
Метод takeWhile у Laravel забезпечує точний контроль над фільтрацією колекцій, дозволяючи видобувати елементи, які послідовно відповідають умові, до першої невдачі. Досліджуйте, як цей потужний інструмент може допомогти у впорядкуванні процесу обробки замовлень та відстеженні статусів, прочитавши нашу статтю!

Метод takeWhile у Laravel надає точний контроль над фільтрацією колекцій, дозволяючи витягувати елементи, які послідовно відповідають умові, до першого збою

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

$ascending = $numbers->takeWhile(function ($number, $key) use ($numbers) {
    if ($key === 0) return true;
    return $number > $numbers[$key - 1];
});
// Результат: [1, 2, 3, 4]

Розглянемо практичний приклад управління системою обробки замовлень зі статусами

<?php

namespace App\Services;

use App\Models\Order;
use App\Models\OrderStatus;
use Illuminate\Support\Collection;

class OrderProcessingService
{
    public function getSuccessfulSteps(Order $order): Collection
    {
        return $order->statusUpdates()
            ->oldest()
            ->get()
            ->takeWhile(function (OrderStatus $status) {
                return $status->successful;
            })
            ->map(function (OrderStatus $status) {
                return [
                    'step' => $status->step_name,
                    'completed_at' => $status->created_at->format('Y-m-d H:i:s'),
                    'processor' => $status->processor_name
                ];
            });
    }

    public function validateProcessingSequence(Collection $steps): bool
    {
        $requiredOrder = ['payment', 'inventory', 'packaging', 'shipping'];
        $currentStep = 0;

        return $steps->takeWhile(function ($step) use ($requiredOrder, &$currentStep) {
            return $step['type'] === $requiredOrder[$currentStep++] ?? null;
        })->count() === count($requiredOrder);
    }
}

Метод takeWhile пропонує потужний інструмент для роботи з послідовними даними, що ідеально підходить для обробки статусів, валідації послідовностей або аналізу тенденцій у ваших даних