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

1

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

Коментарі

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

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

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

PayZephyr
Новини 12 вересня 2026

PayZephyr: Єдиний API для роботи з Stripe, Paystack та PayPal

PayZephyr - Laravel-пакет від Nwaneri Chukwunyere Kenneth, який об'єднує вісім платіжних провайдерів під одним зручним API. Підтримує автоматичне перемикання, захист від подвійної оплати, підписки та повернення коштів.

2
Laravel Telescope
Новини 11 вересня 2026

Artisan-команди для дебагу в Laravel Telescope 5.24.0

Laravel Telescope 5.24.0 додає дві нові Artisan-команди для роботи із записами із терміналу. Тепер можна переглядати запити, винятки, джоби та запити до бази даних без відкриття веб-інтерфейсу, а також отримувати дані у форматі JSON для скриптів та AI-агентів.

3

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

CommerceCore Нова
3 дні тому

Senior PHP Developer

Senior PHP Developer для розробки масштабованих backend-систем у e-commerce. Основний стек: PHP (Laravel/Symfony), MySQL, API-дизайн, мікросервіси. Вимоги: 5+ років досвіду з high-load системами, глибокі знання PHP і БД, розуміння безпеки та архітектури. Менторство команди та вирішення складних технічних задач.

Гарант-Інфо
4 дні тому

Middle PHP Developer (Laravel)

Middle PHP Developer для міжнародного B2B-продукту у телекомунікаціях. Розробка нового функціоналу на PHP 8.x/Laravel, підтримка кодової бази, робота з REST API, платіжними інтеграціями та MySQL. Вимоги: 2+ років комерційного досвіду PHP, впевнене знання Laravel, ООП, SOLID, тестування (PHPUnit/Pest), Git, Docker.

RemoDevs
26 днів тому

Senior PHP Fullstack Developer

Senior PHP Fullstack Developer для платіжної системи. Розробка на PHP 8.2 із Symfony, Vue.js 3, React та TypeScript. Відповідальність за завершення проектів у 6-тижневих циклах, code review, планування та наставництво команди. Робота в remote-команді розміром 1-4 осіб з підтримкою клієнтів і розвитком платформи для платежів.

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

Laravel Kafka

mateusjunges/laravel-kafka

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

730 v2.11.5 13 4

Larastan

nunomaduro/larastan

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

6,500 v3.11.0 13 9