---
title: "Laravel 13.31: метод totalSize() для черг, подія JobInterrupted та покращення BelongsToMany"
url: https://laravelukraine.com/blog/laravel-1331-metod-totalsize-dlia-cerg-podiia-jobinterrupted-ta-pokrashhennia-belongstomany
date: 2026-09-10
source: https://laravel-news.com/laravel-13-31-0?utm_medium=feed&utm_source=feedpress.me&utm_campaign=Feed%3A+laravelnews
---

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

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

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

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

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

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

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

## Подія JobInterrupted

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

```php
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`. Новий функціонал вирішує цю проблему.

```php
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, що робить тестовий код більш виразним:

```php
// Раніше
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 фреймворку.
