News

`hasMany()` Collection Method in Laravel 12.50.0

Published
`hasMany()` Collection Method in Laravel 12.50.0 image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

Release Date: February 4, 2026
Laravel Version: 12.50.0

Summary

Laravel v12.50.0 introduces a new hasMany() collection method for checking if a collection contains multiple matching items, along with support for unique queued listeners, typed cache getters, and a new model method for excluding appended attributes. This release continues Laravel's focus on developer experience improvements with expanded enum support and numerous bug fixes.

Key highlights include:

  • New hasMany() collection method
  • Unique queued listeners support
  • withoutAppends() method for models
  • Typed getters for Cache facade
  • authority() method for URI parsing
  • Enum support for cache array keys
  • Numerous bug fixes and type improvements

What's New

hasMany() Collection Method

Laravel 12.50.0 adds the hasMany() method to collections, providing a straightforward way to check if a collection contains multiple items matching specified criteria. This method serves as the inverse of hasSole() (introduced in v12.49.0) - where hasSole() confirms exactly one match, hasMany() confirms multiple matches.

// 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);

This method is particularly useful for validation logic, conditional workflows, and filtering scenarios where you need to confirm that multiple items exist before proceeding with an operation.

Pull Request: #58550

Unique Queued Listeners

Queued event listeners can now implement the ShouldBeUnique and ShouldBeUniqueUntilProcessing contracts, preventing duplicate listeners from being dispatched to the queue in rapid succession:

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...
}
}

This feature mirrors the unique job pattern and solves a common production issue where listeners are dispatched to the queue multiple times when they should only run once per unique identifier. Unlike the WithoutOverlapping middleware which only prevents concurrent execution, ShouldBeUnique prevents duplicate jobs from entering the queue initially.

Pull Request: #58402

withoutAppends() Model Method

A new withoutAppends() method allows you to selectively remove appended attributes from model instances, improving performance for API responses and data serialization:

// Remove all appended attributes
$user->withoutAppends();
 
// Remove specific appended attributes
$user->withoutAppends(['full_name', 'avatar_url']);

This is particularly useful when you have models with computationally expensive appended attributes that aren't needed for every use case. Instead of defining multiple separate model classes or resource transformations, you can now conditionally exclude appends on a per-request basis.

Pull Request: #58552

Typed Cache Getters

The Cache facade now includes typed getter methods that provide type safety and better IDE support when retrieving cached values:

// 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', []);

These methods ensure type consistency and make it clearer what type of value is expected from the cache, reducing runtime type errors and improving code readability.

Pull Request: #58451

authority() URI Method

The Support\Uri class now includes an authority() method for extracting the authority component from a URI:

$uri = Uri::of('https://user:pass@example.com:8080/path');
$authority = $uri->authority(); // "user:pass@example.com:8080"

The authority component consists of the user information, host, and port of a URI, useful when parsing or validating URLs.

Pull Request: #58534

Enum Support for Cache Array Keys

Continuing Laravel's expanded enum support, Cache::get() now accepts enum values when using array keys:

$values = Cache::get([CacheKey::User, CacheKey::Settings]);

This builds on previous enum support additions in session and cache methods, providing type-safe cache key management throughout your application.

Pull Request: #58616

References

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article