У Laravel 12.50.0 з'явився метод колекції hasMany()

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 06 лютого, 2026
Laravel 12.50.0 приносить низку покращень для кращого досвіду розробника: новий метод колекцій hasMany(), підтримку унікальних відкладених обробників подій, метод withoutAppends() для моделей і типізовані гетери кешу. Хочете дізнатися, як ці зміни спростять валідацію, роботу з чергами та серіалізацію моделей у вашому проєкті?

Дата випуску: February 4, 2026
Версія Laravel: 12.50.0

Коротко

Laravel v12.50.0 додає новий метод колекцій hasMany() для перевірки наявності кількох відповідних елементів, а також підтримку унікальних queued listeners, типізовані геттери кешу та новий метод моделі для виключення appended-атрибутів. Реліз і надалі покращує досвід розробника — розширена підтримка enum і безліч виправлень помилок.

Головні новинки:

# Що нового

# Метод колекції 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

# Джерела

Популярні

Logomark Logotype

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

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

Logomark Logotype

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

Logomark Logotype

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту