{"@attributes":{"version":"2.0"},"channel":{"title":"ollieread.com \u2014 Laravel & PHP Expert","link":"https:\/\/ollieread.com","description":"Articles about Laravel and PHP \u2014 from the obvious to the genuinely hidden.","language":"en-gb","lastBuildDate":"Thu, 02 Jul 2026 15:49:59 GMT","item":[{"title":"You Probably Don't Need a Database Per Tenant","link":"https:\/\/ollieread.com\/articles\/you-probably-dont-need-a-database-per-tenant","guid":"https:\/\/ollieread.com\/articles\/you-probably-dont-need-a-database-per-tenant","description":"There are many different ways to handle data separation and isolation when it comes to multitenancy, each with their own trade-offs. There's also a very common misconception that to achieve multitenancy, each tenant must have its own database. Not only is that not true, it's also often not the best approach.","pubDate":"Sat, 27 Jun 2026 00:00:00 GMT"},{"title":"TheGamePanel: A Modern Alternative to Pterodactyl","link":"https:\/\/ollieread.com\/articles\/thegamepanel-a-modern-alternative-to-pterodactyl","guid":"https:\/\/ollieread.com\/articles\/thegamepanel-a-modern-alternative-to-pterodactyl","description":"After years of working with existing game server panels, I'm building my own. The Game Panel is a modern alternative to Pterodactyl and Pelican, built from the ground up on a purpose-built PHP framework with a modular architecture designed for hosts and server owners alike.","pubDate":"Wed, 20 May 2026 00:00:00 GMT"},{"title":"Composer Run Dev and Laravel Sail","link":"https:\/\/ollieread.com\/articles\/composer-run-dev-and-laravel-sail","guid":"https:\/\/ollieread.com\/articles\/composer-run-dev-and-laravel-sail","description":"If, like me, you're a user of Laravel Sail for some of your Laravel projects, you'll have probably noticed that the \ndefault 'composer run dev' command that ships with Laravel, just won't work for you. Well, I've got a solution for \nyou!\n","pubDate":"Tue, 24 Mar 2026 00:00:00 GMT"},{"title":"Laravel's Route \"Model\" Binding","link":"https:\/\/ollieread.com\/articles\/laravels-route-model-binding","guid":"https:\/\/ollieread.com\/articles\/laravels-route-model-binding","description":"A source-driven walkthrough of how Laravel resolves route parameters into model instances, covering the UrlRoutable interface and implicit binding customization.","pubDate":"Wed, 03 Dec 2025 00:00:00 GMT"},{"title":"The Hidden Parts of Laravel","link":"https:\/\/ollieread.com\/series\/the-hidden-parts-of-laravel","guid":"https:\/\/ollieread.com\/series\/the-hidden-parts-of-laravel","description":"Laravel's documentation is excellent, but it doesn't cover everything. Tucked away in the framework's source code are features that are either briefly mentioned or entirely undocumented. This series explores those hidden capabilities, how they work, and how you can use them in your own projects.\n","pubDate":"Wed, 03 Dec 2025 00:00:00 GMT"},{"title":"Manual Service Resolution in Laravel","link":"https:\/\/ollieread.com\/articles\/manual-service-resolution-in-laravel","guid":"https:\/\/ollieread.com\/articles\/manual-service-resolution-in-laravel","description":"An examination of the various methods for manually resolving services from Laravel's service container, with recommendations on which to use.","pubDate":"Wed, 26 Nov 2025 00:00:00 GMT"},{"title":"Laravel Middleware Priority","link":"https:\/\/ollieread.com\/articles\/laravel-middleware-priority","guid":"https:\/\/ollieread.com\/articles\/laravel-middleware-priority","description":"An exploration of Laravel's undocumented middleware priority feature that controls execution order when multiple middleware pieces apply to a route.","pubDate":"Wed, 19 Nov 2025 00:00:00 GMT"},{"title":"Decorating Services in Laravel","link":"https:\/\/ollieread.com\/articles\/decorating-services-in-laravel","guid":"https:\/\/ollieread.com\/articles\/decorating-services-in-laravel","description":"How to use Laravel's undocumented extend method to add functionality to existing services without modifying their code.","pubDate":"Tue, 11 Nov 2025 00:00:00 GMT"},{"title":"Introducing the Request-derived Context Pattern","link":"https:\/\/ollieread.com\/articles\/introducing-the-request-derived-context-pattern","guid":"https:\/\/ollieread.com\/articles\/introducing-the-request-derived-context-pattern","description":"Defining the Request-derived Context Pattern, an architectural approach for extracting and managing contextual  information from HTTP requests.\n","pubDate":"Sun, 29 Jun 2025 00:00:00 GMT"},{"title":"Managing the Memory Usage of the Laravel Eloquent Identity Map","link":"https:\/\/ollieread.com\/articles\/managing-the-memory-usage-of-the-laravel-eloquent-identity-map","guid":"https:\/\/ollieread.com\/articles\/managing-the-memory-usage-of-the-laravel-eloquent-identity-map","description":"Addressing memory management challenges when using a Laravel Eloquent identity map, particularly in scenarios involving large model hydration or Laravel Octane environments.","pubDate":"Tue, 10 Jun 2025 00:00:00 GMT"},{"title":"Building An Eloquent Identity Map","link":"https:\/\/ollieread.com\/series\/building-an-eloquent-identity-map","guid":"https:\/\/ollieread.com\/series\/building-an-eloquent-identity-map","description":"A two-part series walking through the implementation of an identity map for Laravel Eloquent. The first article  introduces the pattern, explains what it achieves, and builds a minimal implementation using a custom base model  class. The second article follows up on the memory implications of that implementation, covering how to manage and  prevent memory leaks, particularly in long-lived processes such as those powered by Laravel Octane.\n","pubDate":"Tue, 10 Jun 2025 00:00:00 GMT"},{"title":"Preventing Duplicate Model Instances in Eloquent","link":"https:\/\/ollieread.com\/articles\/a-minimal-identity-map-for-laravel-eloquent","guid":"https:\/\/ollieread.com\/articles\/a-minimal-identity-map-for-laravel-eloquent","description":"Update a model in one place, and the change doesn't show in another? Eloquent creates duplicate instances of the same row; an identity map stops it.","pubDate":"Wed, 21 May 2025 00:00:00 GMT"},{"title":"How to Hide Route Parameters from Controllers in Laravel","link":"https:\/\/ollieread.com\/articles\/how-to-hide-route-parameters-from-controllers-in-laravel","guid":"https:\/\/ollieread.com\/articles\/how-to-hide-route-parameters-from-controllers-in-laravel","description":"How to use Laravel's forgetParameter() method to remove route parameters from the controller's scope after they've been processed.","pubDate":"Mon, 05 May 2025 00:00:00 GMT"},{"title":"Avoiding Eager Loading When Registering Laravel Drivers","link":"https:\/\/ollieread.com\/articles\/avoiding-eager-loading-when-registering-laravel-drivers","guid":"https:\/\/ollieread.com\/articles\/avoiding-eager-loading-when-registering-laravel-drivers","description":"How to defer driver registration in Laravel to avoid eager loading features on every request.","pubDate":"Mon, 05 May 2025 00:00:00 GMT"},{"title":"Website revamp, new content and upcoming projects","link":"https:\/\/ollieread.com\/articles\/website-revamp-new-content-and-upcoming-projects","guid":"https:\/\/ollieread.com\/articles\/website-revamp-new-content-and-upcoming-projects","description":"Announcing the blog relaunch, initial articles, and upcoming educational products.","pubDate":"Mon, 05 May 2025 00:00:00 GMT"}]}}