Efficient Memoization with Laravel's Once Helper
Overview
Fetching the same data multiple times within a single request is a common performance bottleneck. Whether you are retrieving a user profile for the header, a sidebar, and a footer, or fetching a list of featured items, redundant database queries waste resources. The once helper in provides an elegant solution for in-memory memoization. It ensures that a given callback is executed exactly once during the lifecycle of a request, returning the cached result for all subsequent calls.
Prerequisites
To follow this tutorial, you should have a baseline understanding of PHP and the framework. Familiarity with anonymous functions (closures) and static methods will help you grasp the implementation details. You will need or higher to use this as a built-in feature.
Key Libraries & Tools
- Framework: The primary PHP framework providing the helper.
- once: The original package that inspired this native implementation.
- : An excellent code runner for testing snippets in real-time.
Code Walkthrough
Suppose we have a Podcast model with a static method that fetches featured shows via an action class. Without optimization, every call triggers a new query.
// Before: Every call hits the database
public static function featured()
{
return (new GetFeaturedPodcastsAction)->execute();
}
To optimize this, wrap the logic in the once helper. The helper accepts a callable and stores the result based on the calling context.
// After: Optimized with the once helper
public static function featured()
{
return once(fn () => (new GetFeaturedPodcastsAction)->execute());
}
When the application executes this code three times in one request, runs the inner logic on the first attempt, caches the return value, and serves that cached value for calls two and three. This eliminates redundant database overhead instantly.
Syntax Notes
The once helper uses the object instance or class and the method name to create a unique cache key. It relies on a closure (fn () => ...) to encapsulate the logic you want to memoize. This pattern is much cleaner than manually checking if a property is null before assigning a value.
Tips & Gotchas
Remember that once only persists for the duration of the current HTTP request. If you need to store data across multiple requests or for hours at a time, you must use 's standard Cache facade. Additionally, be mindful of state; if the underlying data changes mid-request, once will still return the original result until the request ends.
- 60%路 products
- 10%路 products
- 10%路 companies
- 10%路 people
- 10%路 products

Laravel Gems - Once 馃拵
WatchLaravel // 3:13
The official YouTube channel of Laravel, the clean stack for Artisans and agents. We will update you on what's new in the world of Laravel, from the framework to our products Cloud, Forge, and Nightwatch.