Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 10 вересня 2026

Laravel 13.31: метод totalSize() для черг, подія JobInterrupted та покращення BelongsToMany

Команда Laravel випустила версію 13.31.0, яка містить метод totalSize() для з'єднань черг, нову подію JobInterrupted, підтримку chaperone для pivot-моделей BelongsToMany та інші покращення.

Метод totalSize() для черг

Jack Bayliss додав метод totalSize(), який відповідає на питання "скільки всього завдань зараз у моєму з'єднанні черги?" До цього доводилося вручну підсумовувати кількість очікуваних, відкладених і зарезервованих завдань.

// Раніше
Queue::totalPendingSize() + Queue::totalDelayedSize() + Queue::totalReservedSize();

// Тепер
Queue::totalSize();

Це спрощує код і робить його більш читабельним.

Подія JobInterrupted

Jack Bayliss також додав нову подію JobInterrupted, яка спрацьовує, коли воркер перериває завдання, що реалізує контракт Interruptible. Це дозволяє прослуховувати цю подію та виконувати необхідне очищення чи логування.

use Illuminate\Queue\Events\JobInterrupted;

Event::listen(JobInterrupted::class, function (JobInterrupted $event) {
    // Обробка переривання завдання
});

Тепер розробники можуть краще контролювати життєвий цикл завдань і реагувати на їх переривання.

Підтримка chaperone для pivot-моделей BelongsToMany

Caleb White додав підтримку chaperone для pivot-моделей BelongsToMany. Це дозволяє використовувати метод chaperone() у відношенні BelongsToMany для отримання екземпляра pivot-моделі.

Як пояснює автор, під час використання кастомних pivot-моделей часто визначають відношення BelongsTo на моделі, але їх використання вимагає завантаження моделей з бази даних, навіть якщо обидві моделі доступні під час гідратації BelongsToMany. Новий функціонал вирішує цю проблему.

class PostTagPivot extends Pivot
{
    public function post(): BelongsTo
    {
        return $this->belongsTo(Post::class);
    }

    public function tag(): BelongsTo
    {
        return $this->belongsTo(Tag::class);
    }
}

class Tag extends Model
{
    public function posts(): BelongsToMany
    {
        return $this->belongsToMany(Post::class)
            ->using(PostTagPivot::class)
            // автоматично визначає назви відношень
            ->chaperone();
            // але можна перевизначити за потреби
            ->chaperone(declaring: 'tag', related: 'post');
    }
}

class Post extends Model
{
    public function tags(): BelongsToMany
    {
        return $this->belongsToMany(Tag::class)
            ->using(PostTagPivot::class)
            ->chaperone(declaring: 'post', related: 'tag');
    }
}

Якщо кастомна pivot-модель не надається, виклик ->chaperone() не матиме ефекту.

URL сервера розробки Vite

@ramonmalcolm10 додав метод devServerUrl() до класу Vite, який дозволяє отримати URL сервера розробки Vite. Це корисно для генерації URL ресурсів у вашому застосунку під час розробки.

Assertions "once" для Mail та Notification фейків

@talaridisTh додав нові assertions "once" для фейків Mail та Notification, що робить тестовий код більш виразним:

// Раніше
Mail::assertSentTimes(OrderShipped::class, 1);
Mail::assertQueuedTimes(OrderShipped::class, 1);
Notification::assertSentToTimes($user, InvoicePaid::class, 1);
Notification::assertSentOnDemandTimes(InvoicePaid::class, 1);

// Тепер
Mail::assertSentOnce(OrderShipped::class);
Mail::assertQueuedOnce(OrderShipped::class);
Notification::assertSentToOnce($user, InvoicePaid::class);
Notification::assertSentOnDemandOnce(InvoicePaid::class);

Ці скорочені методи роблять тести більш зрозумілими та легкими для читання.

Інші покращення

Версія 13.31.0 також містить численні виправлення помилок та покращення:

  • Покращення безпеки аутентифікації при перевірці cookie
  • Виправлення TypeError у userFromRecaller() коли recaller не знаходить користувача
  • Підтримка кластера Redis для драйвера черг
  • Виправлення витоку пам'яті в HTTP Client
  • Виправлення assertJsonMissingPath() що ігнорувало wildcards
  • Кваліфікація стовпця м'якого видалення з псевдонімом таблиці запиту
  • Збереження Eloquent на прямому з'єднанні під час міграцій
  • Виправлення генерації URL маршрутів за певних обставин

Повний список змін та порівняння версій 13.30.0 та 13.31.0 доступний на GitHub у changelog фреймворку.

11

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Filament v5.10.0
Новини 12 жовтня 2026

Filament v5.10.0: сітка в rich editor, скелетони таблиць і десятки виправлень

Вийшов Filament v5.10.0: елементи керування сіткою в rich editor, допоміжний контент для віджетів-графіків, скелетони завантаження таблиць, submitOnCompletion() для OneTimeCodeInput та багато виправлень авторизації, доступності й стану.

17
Laravel AI SDK на практиці
Новини 09 жовтня 2026

Laravel AI SDK на практиці: агент, що стоїть за There There

Фрік Ван дер Гертен розповідає, як у Spatie побудували AI-шар хелпдеска There There на Laravel AI SDK: клас агента, інструменти з типізованою JSON-схемою та делегування роботи звичайним domain-діям.

12

Вакансії за темою

Z Global E-Commerce
16 днів тому

Full-Stack Developer (PHP/Laravel + Vue 3)

Full-Stack розробник з глибоким досвідом бекенду. Розробляєте масштабовані веб-платформи з комплексною бізнес-логікою, працюєте з PHP/Laravel, SQL, Vue 3/TypeScript. Основні вимоги: досвід з Laravel, Eloquent, проектування API, оптимізація баз даних (включно з мільйонами записів), фронтенд на Vue 3 з Composition API, TypeScript. Цінується розуміння архітектури, продуктивності й довгострокової підтримуваності коду.

Key2Law
30 днів тому

Full Stack Developer (Laravel)

Full Stack розробник на Laravel для розробки та підтримки веб-додатків. Відповідальний за реалізацію backend (REST APIs, бізнес-логіка, оптимізація БД) і frontend (Blade, Tailwind, Alpine/Livewire/Vue), тестування, деплой та моніторинг. Вимоги: PHP 8.1+, Laravel 10+, знання Eloquent, Queue, Redis, MySQL, JavaScript ES6+, PHPUnit/Pest, Docker, Git, основи AWS. Бажано досвід з Fintech, криптовалютами, high-availability системами.

GGLUXOUTLET
12 днів тому

Senior+/Tech Lead Full-Stack WordPress Developer / Code Architect

Досвідчений Senior+/Tech Lead Full-Stack WordPress розробник для проєктування та розробки високонавантажених e-commerce рішень. Потрібні глибокі знання WordPress Core, WooCommerce, PHP 8.1+ з SOLID/ООП, React/Next.js для фронтенду, Python для автоматизації, DevOps (VPS, Docker, CI/CD) та AI-інтеграцій. Роль включає архітектуру, код-рев'ю, менторство і комунікацію з бізнесом. Мінімум 7 років досвіду, з них 3+ на WordPress/WooCommerce у високонавантажених проєктах.

Пакети за темою

Laravel Kafka

mateusjunges/laravel-kafka

Драйвер Kafka для Laravel, що забезпечує інтеграцію з Apache Kafka для обробки потокових повідомлень та подій в додатках Laravel.

736 v2.13.0 13 4

Larastan

nunomaduro/larastan

Larastan — це розширення phpstan/phpstan для Laravel, яке дозволяє виявляти помилки у коді без його запуску.

6,538 v3.13.0 13 9