---
title: "Що ми знаємо про Laravel 14"
url: https://laravelukraine.com/blog/shho-mi-znajemo-pro-laravel-14
date: 2026-09-22
source: https://laravel-news.com/laravel-14?utm_medium=feed&utm_source=feedpress.me&utm_campaign=Feed%3A+laravelnews
---

# Що ми знаємо про Laravel 14

Laravel 14 - наступний мажорний реліз фреймворку Laravel, який очікується у першому кварталі 2027 року. Цей реліз вимагатиме PHP 8.4 як мінімальну версію та слідуватиме стандартному циклу підтримки Laravel: виправлення помилок до третього кварталу 2028 року та оновлення безпеки до першого кварталу 2029 року.

Команда Laravel ще не оголосила офіційну дату релізу чи перелік функцій. Вся інформація нижче походить із гілки `master` репозиторію [laravel/framework](https://github.com/laravel/framework), де відбувається розробка Laravel 14, і будь-що може змінитися до релізу.

## Нові можливості

Функції Laravel 14 додаватимуться до цього посту в міру їх оголошення. Більшість нових можливостей досі виходять у щотижневих мінорних релізах Laravel 13, а функції нижче чекають на Laravel 14, оскільки вони додають метод до контракту або змінюють сигнатуру.

### Route::query()

[#60655](https://github.com/laravel/framework/pull/60655) від [Vazha Aptsiauri](https://github.com/Afcyy) додає підтримку маршрутизації для HTTP-методу `QUERY` - безпечного методу, який передає тіло запиту:

```php
Route::query('/search', function () {
    return request()->input('filter');
});
```

`Route::any()` включає `QUERY`, а CSRF-middleware обробляє його як запит на читання, так само як `GET`, `HEAD` та `OPTIONS`.

[Laravel 13.19](https://laravel-news.com/laravel-13-19-0) вже додав `Http::query()` до HTTP-клієнта разом із тестовими хелперами `query()` та `queryJson()`.

### $user->authorize()

[Will Rowe](https://github.com/willrowe) додав метод `authorize()` до контракту та трейту `Authorizable` у [#59708](https://github.com/laravel/framework/pull/59708):

```php
// Laravel 13
Gate::forUser($user)->authorize('viewAny', Post::class);
// Laravel 14
$user->authorize('viewAny', Post::class);
```

Він працює як `$user->can()`, але викидає `AuthorizationException`, коли перевірка не проходить.

### Контекст для report()

Хелпер `report()` та метод `report()` обробника винятків приймають необов'язковий масив контексту, доданий [Caleb White](https://github.com/calebdw) у [#60767](https://github.com/laravel/framework/pull/60767):

```php
try {
    $order->charge();
} catch (Throwable $e) {
    report($e, ['order_id' => $order->id]);
}
```

Контракт `ExceptionHandler` змінюється на `report(Throwable $e, array $context = [])`, тому власний обробник, який перевизначає `report()`, потребує новий параметр.

### Storage::fake() для дисків на вимогу

`Storage::fake('ondemand')` перехоплює виклики `Storage::build()`, тож ви можете тестувати диски на вимогу з тими ж твердженнями, що й іменовані диски ([#61378](https://github.com/laravel/framework/pull/61378)). PR надіслано до `master`, оскільки додаток може вже мати диск з назвою `ondemand`.

### orWhereKey() та підзапити в whereKey()

Caleb White консолідував `whereKey()` та `whereKeyNot()` і додав `orWhereKey()` та `orWhereKeyNot()` у [#61395](https://github.com/laravel/framework/pull/61395). Другий PR, [#61496](https://github.com/laravel/framework/pull/61496), дозволяє всім чотирьом методам приймати підзапит.

## Критичні зміни

### Методи паузи черги приймають чергу першою

Laravel 13.25 додав можливість [призупиняти всі черги](https://laravel-news.com/laravel-13-25-0), а методи для окремих черг на фасаді `Queue` вимагали з'єднання як перший аргумент. [#61076](https://github.com/laravel/framework/pull/61076) переміщує з'єднання в кінець і робить його типовим:

```php
// Laravel 13
Queue::pause('redis', 'emails');
Queue::pauseFor('redis', 'emails', 60);
// Laravel 14
Queue::pause('emails');
Queue::pauseFor('emails', 60);
Queue::pause('emails', 'redis');
```

`resume()` та `isPaused()` також приймають чергу першою та необов'язкове з'єднання другим.

### lazy() та chunk() більше не змінюють Builder

У Laravel 13 `lazy()` та `chunk()` змінюють query builder під час пагінації. Повторне використання того ж builder після цього повертає неправильний результат:

```php
$query = User::query();
foreach ($query->lazy(2) as $user) {
    // ...
}
$query->count(); // 0 у Laravel 13
```

Jack Bayliss виправив обидва методи в [#61411](https://github.com/laravel/framework/pull/61411) та [#61428](https://github.com/laravel/framework/pull/61428), тож `count()` повертає повне число рядків у Laravel 14.

### findOr() з масивом ID

`Builder::findOr()` ніколи не викликав callback, коли ви передавали масив ID. [#61577](https://github.com/laravel/framework/pull/61577) від [Matthieu](https://github.com/MatthieuFlaceliere) робить його відповідним `findOrFail()` та версіям `findOr()` для зв'язків:

```php
User::findOr([1, 99], fn () => 'fallback');
// Laravel 13: колекція, що містить лише користувача 1
// Laravel 14: 'fallback'
```

### Cache::has() та Cache::forget() з масивами

Docblock'и для `has()` та `forget()` приймають масиви вже чотири роки, але `Cache::has(['a', 'b'])` завжди повертав `true`, а `Cache::forget(['a', 'b'])` не видаляв ключі. [#61466](https://github.com/laravel/framework/pull/61466) від Jack Bayliss виправляє обидва методи. У Laravel 14 `has()` повертає `true` тільки коли кожен ключ існує:

```php
Cache::put('foo', 'bar');
Cache::has(['foo', 'missing']);
// Laravel 13: true
// Laravel 14: false
```

Передача масиву до `forget()` видаляє кожен ключ, і він повертає `true` тільки коли кожен ключ було видалено:

```php
Cache::forget(['foo', 'baz']);
// Laravel 13: ключі залишаються, і Redis-сховище видає
// попередження "Array to string conversion"
// Laravel 14: обидва ключі видаляються
```

### MassPrunable включає м'яко видалені моделі

Трейт `Prunable` додає `withTrashed()` до запиту очищення, коли модель використовує м'яке видалення. `MassPrunable` не робив цього, і [#61425](https://github.com/laravel/framework/pull/61425) робить їх узгодженими. Візьмемо модель, що використовує обидва трейти:

```php
use Illuminate\Database\Eloquent\MassPrunable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use MassPrunable, SoftDeletes;

    public function prunable()
    {
        return static::where('created_at', '<=', now()->subMonth());
    }
}
```

У Laravel 13 `model:prune` примусово видаляє відповідні пости, які не є м'яко видаленими, а м'яко видалені пости залишаються в таблиці. У Laravel 14 він примусово видаляє кожен відповідний пост, включно з м'яко видаленими.

Якщо ви використовуєте `MassPrunable` на моделі з м'яким видаленням, перевірте, що ваш запит `prunable()` досі вибирає очікувані рядки. Щоб зберегти поведінку Laravel 13, додайте `withoutTrashed()` до запиту.

## Вимоги до версії PHP

Laravel 14 вимагатиме PHP 8.4 як мінімальну версію, що є підвищенням від мінімальної версії PHP 8.3 у Laravel 13. У [#59104](https://github.com/laravel/framework/pull/59104) Laravel 14 підвищує мінімальну версію до PHP 8.4, оскільки Symfony 8 вимагає [PHP 8.4](https://laravel-news.com/php-8-4-0) як мінімум.

Laravel також працюватиме з новішими версіями PHP. Дивіться [Що нового в PHP 8.6](https://laravel-news.com/php-8-6) для решти інформації про цей реліз.

Інші зміни залежностей у `master`, які ймовірно з'являться в Laravel 14:

- `ably/ably-php` переходить на версію, що використовує протокол Ably 2.0 ([#60860](https://github.com/laravel/framework/pull/60860))
- `orchestra/testbench-core` переходить на `^12.0`
- Підтримуються PHPUnit 11.5, 12.5 та 13

## Часова лінія підтримки

[Політика підтримки](https://laravel.com/docs/releases#support-policy) Laravel передбачає щорічний вихід мажорних релізів приблизно в першому кварталі. Відповідно до цієї політики, **Laravel 14 отримуватиме виправлення помилок до третього кварталу 2028 року** та **оновлення безпеки до першого кварталу 2029 року**:

| Версія | PHP (*) | Реліз | Виправлення помилок до | Оновлення безпеки до |
|--------|---------|-------|------------------------|----------------------|
| 11 | 8.2 - 8.4 | 12 березня 2024 | 3 вересня 2025 | 12 березня 2026 |
| 12 | 8.2 - 8.5 | 24 лютого 2025 | 13 серпня 2026 | 24 лютого 2027 |
| 13 | 8.3 - 8.5 | 17 березня 2026 | Q3 2027 | 17 березня 2028 |
| 14 | 8.4+ | Q1 2027 | Q3 2028 | Q1 2029 |

*Примітка: Офіційна документація ще не містить Laravel 14, офіційні деталі TBD.*

[Laravel 13](https://laravel-news.com/laravel-13-released), випущений 17 березня 2026 року, продовжуватиме отримувати:

- Виправлення помилок до третього кварталу 2027 року
- Оновлення безпеки до 17 березня 2028 року

Laravel 12 більше не отримує виправлення помилок, а його оновлення безпеки закінчуються 24 лютого 2027 року.

## Оновлення до Laravel 14

Якщо ви хочете автоматизувати оновлення, коли Laravel 14 буде випущено, перевірте [Laravel Shift](https://laravelshift.com/). Shift відкриває pull request з атомарними комітами для вашого перегляду.
