Дата випуску: February 4, 2026
Версія Laravel: 12.50.0
Коротко
Laravel v12.50.0 додає новий метод колекцій hasMany() для перевірки наявності кількох відповідних елементів, а також підтримку унікальних queued listeners, типізовані геттери кешу та новий метод моделі для виключення appended-атрибутів. Реліз і надалі покращує досвід розробника — розширена підтримка enum і безліч виправлень помилок.
Головні новинки:
- Новий метод колекцій
hasMany() - Підтримка унікальних queued listeners
- Метод
withoutAppends()для моделей - Типізовані геттери для Cache facade
- Метод
authority()для розбору URI - Підтримка enum для ключів масивів у Cache
- Багато виправлень помилок і покращень типів
# Що нового
# Метод колекції hasMany()
У версії 12.50.0 до колекцій додано hasMany() — простий спосіб перевірити, чи містить колекція кілька елементів, що задовольняють умову. Це зворотна операція до hasSole() (v12.49.0): якщо hasSole() підтверджує рівно один збіг, то hasMany() — наявність кількох.
// Check if collection has multiple items
$collection->hasMany();
// With a callback filter
$users->hasMany(fn ($user) => $user->isActive());
// With key/value pair
$orders->hasMany('status', 'pending');
// With operator syntax
$products->hasMany('price', '>=', 100);
Зручно для валідації, умовних сценаріїв і фільтрації, коли треба переконатися у наявності кількох елементів перед виконанням операції.
Pull Request: #58550
# Унікальні queued listeners
Queued event listeners тепер можуть реалізовувати контракти ShouldBeUnique та ShouldBeUniqueUntilProcessing, що запобігає дублюванню слухачів у черзі при швидкому багаторазовому надсиланні:
namespace App\Listeners;
use App\Events\LicenseSaved;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
class AcquireProductKey implements ShouldQueue, ShouldBeUnique
{
public function uniqueId(LicenseSaved $event): string
{
return $event->license->id;
}
public function __invoke(LicenseSaved $event): void
{
// Process event...
}
}
Це аналогічно паттерну унікальних job і вирішує типову проблему продакшену, коли слухачі потрапляють у чергу кілька разів, хоча повинні виконатися лише раз для конкретного ідентифікатора. На відміну від middleware WithoutOverlapping, яке лише запобігає одночасному виконанню, ShouldBeUnique не дозволяє дублюваним задачам потрапити в чергу спочатку.
Pull Request: #58402
# Метод withoutAppends() для моделей
Новий метод withoutAppends() дозволяє вибірково видаляти appended-атрибути з екземплярів моделі, що покращує продуктивність при формуванні API-відповідей та серіалізації даних:
// Remove all appended attributes
$user->withoutAppends();
// Remove specific appended attributes
$user->withoutAppends(['full_name', 'avatar_url']);
Особливо корисно, якщо у моделі є обчислювані appended-атрибути, які дорого по ресурсах і не потрібні для кожного запиту. Замість кількох моделей або трансформацій ресурсів можна умовно виключати appends під час запиту.
Pull Request: #58552
# Типізовані геттери Cache
Facade Cache тепер має типізовані методи для отримання значень з кешу, що підвищує безпеку типів і підтримку IDE:
// Get integer with default
$count = Cache::integer('view_count', 0);
// Get string with default
$name = Cache::string('user_name', 'Guest');
// Get boolean with default
$isActive = Cache::boolean('feature_enabled', false);
// Get float with default
$price = Cache::float('product_price', 0.0);
// Get array with default
$items = Cache::array('cart_items', []);
Ці методи гарантують консистентність типів і роблять очевидним, який тип значення очікується з кешу, зменшуючи помилки під час виконання і покращуючи читабельність коду.
Pull Request: #58451
# Метод authority() для URI
Клас Support\Uri отримав метод authority() для виділення authority-компоненти з URI:
$uri = Uri::of('https://user:pass@example.com:8080/path');
$authority = $uri->authority(); // "user:pass@example.com:8080"
Authority складається з інформації про користувача, хоста та порту — корисно при парсингу або валідації URL.
Pull Request: #58534
# Підтримка enum для ключів масивів у Cache
Продовжуючи розширення підтримки enum, Cache::get() тепер приймає enum-значення при використанні масивних ключів:
$values = Cache::get([CacheKey::User, CacheKey::Settings]);
Це доповнює попередні додатки підтримки enum у сесіях і методах кешу, забезпечуючи типобезпечне управління ключами кешу по всьому додатку.
Pull Request: #58616