Need Exactly One Item? Use sole() on Laravel Collections

Retrieve a collection item only when exactly one match exists.

  • 19 Jun, 2026
  • 33 Views

Need Exactly One Item? Use sole() on Laravel Collections

Laravel Collections provide a powerful method called:

sole()

The sole() method returns an item from the collection only when exactly one element matches.


Using a Callback

You may pass a callback to sole(). It will return the item only if the callback matches exactly one element.

collect([10, 20, 30, 40])->sole(function (int $value) {
    return $value === 20;
});

Result:

20

Using Key / Value Pairs

You may also provide a key and value pair.

Suppose you have a collection of coupons:

$coupons = collect([
    ['code' => 'SAVE10', 'discount' => 10],
    ['code' => 'SAVE20', 'discount' => 20],
]);

Retrieve a coupon by its code:

$coupons->sole('code', 'SAVE20');

Result:

[
    'code' => 'SAVE20',
    'discount' => 20,
]

This is useful when you know there should be exactly one matching item.

Real Project Example

Suppose a user should have only one default address:

$defaultAddress = $user->addresses
    ->sole('is_default', true);

Result:

[
    'city' => 'Ahmedabad',
    'is_default' => true,
]

This guarantees that only one address is marked as default.

Why Use sole()?

sole() helps you:

  • Retrieve exactly one matching item
  • Express business rules clearly
  • Avoid silently returning the first result
  • Detect unexpected collection states

Share: