Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 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

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

Коментарі

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

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

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

Новини 27 жовтня 2026

Filament v5.11.0: поля й віджети на React, Vue і Svelte та жорсткіший захист Livewire

Filament v5.11.0 дозволяє писати власні поля форм, компоненти схем і віджети на React, Vue, Svelte або чистому JavaScript. Паралельно v5.11.0 і v4.16.0 закривають для клієнта внутрішні Livewire-методи та стан і додають опційні ліміти для репітерів і пагінації таблиць.

2
Новини 27 жовтня 2026

Livewire 4.4.8 закриває обхід #[Authorize], а NativePHP Mobile - сім вразливостей

Livewire 4.4.8 виправляє GHSA-mhf7-xp6r-6qrc (CVSS 6.5): атрибут #[Authorize] можна було обійти й виконати дію над чужим записом. Того ж тижня NativePHP опублікувала сім попереджень для NativePHP for Mobile - виправлення в nativephp/mobile 4.6.1 і 3.3.11, але до користувачів вони дійдуть лише з новою збіркою застосунку.

1

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

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

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

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

Intetics
7 днів тому

Senior Full-Stack PHP Developer (Laravel + React/Vue)

Senior Full-Stack PHP розробник створює й підтримує масштабовані веб-застосунки: бекенд на Laravel та фронтенд на React або Vue. Відповідає за архітектурні рішення (дизайн сервісів, моделювання даних, кешування, черги), проєктує REST API та інтеграції, рефакторить legacy-код і оптимізує запити. Вимоги: 5+ років досвіду з сучасним PHP 8.x, 3+ роки з Laravel, 3+ роки з React або Vue, сильний TypeScript, досвід з Redis і чергами, автотести та CI/CD.

EpicentrK
8 днів тому

BackEnd PHP

Розробка та імплементація сервісів на базі мікросервісної архітектури на PHP, підтримка технічної культури команди, дотримання інженерних стандартів і дедлайнів. Вимоги: від 4 років комерційного досвіду з PHP 7+, досвід з PostgreSQL/MySQL та MongoDB, RabbitMQ, Elasticsearch, Docker, Kubernetes, CI/CD (Jenkins, GitLab), REST API, тестування та Agile.

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

Laravel Kafka

mateusjunges/laravel-kafka

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

736 v2.13.1 13 4

Larastan

nunomaduro/larastan

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

6,541 v3.13.2 13 9