<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/feed/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
                        <id>https://phptoptens.com/authors/joel-clermont/feed</id>
                                <link href="https://phptoptens.com/authors/joel-clermont/feed" rel="self"></link>
                                <title><![CDATA[Artisan Weekly — Author Feed]]></title>
                    
                                <subtitle>Featured links for a given author across Artisan Weekly editions.</subtitle>
                                                    <updated>2026-10-08T14:25:19+01:00</updated>
                        <entry>
            <title><![CDATA[Why is my model's primary key zero after saving?]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-10-08-why-is-my-models-primary-key-zero-after-saving" />
            <id>https://masteringlaravel.io/daily/2026-10-08-why-is-my-models-primary-key-zero-after-saving</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[A practical explanation of why Eloquent models with non-auto-incrementing primary keys can unexpectedly reset to zero after saving, with a clear solution using the $incrementing property.]]>
            </summary>
                                    <updated>2026-10-08T14:25:19+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Keeping pinned GitHub Actions up to date]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-09-24-keeping-pinned-github-actions-up-to-date" />
            <id>https://masteringlaravel.io/daily/2026-09-24-keeping-pinned-github-actions-up-to-date</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Learn how to keep your pinned GitHub Actions up to date using Dependabot with a practical configuration strategy that balances security and maintenance. This guide walks through grouping updates by publisher and setting appropriate cooldown periods to manage supply chain risks effectively.]]>
            </summary>
                                    <updated>2026-09-24T20:28:19+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Loading a SQL backup without altering your configuration]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-09-16-republished-loading-a-sql-backup-without-altering-your-configuration" />
            <id>https://masteringlaravel.io/daily/2026-09-16-republished-loading-a-sql-backup-without-altering-your-configuration</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[A practical guide to temporarily adjusting MySQL's sql_mode during database migrations without permanently altering your server configuration, ideal for handling legacy data with strict mode conflicts.]]>
            </summary>
                                    <updated>2026-09-16T14:36:21+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Loading relationships inside a queued job]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-09-03-republished-loading-relationships-inside-a-queued-job" />
            <id>https://masteringlaravel.io/daily/2026-09-03-republished-loading-relationships-inside-a-queued-job</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[A practical guide to efficiently loading Eloquent relationships when serialising models in Laravel queued jobs and notifications, demonstrating how to convert arrays to collections for eager loading.]]>
            </summary>
                                    <updated>2026-09-03T21:54:05+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Which layer of caching does your slow app actually need?]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=b5m1JQRWzME" />
            <id>https://www.youtube.com/watch?v=b5m1JQRWzME</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[When someone says your app is slow and you need caching, do you actually know which layer of caching they are talking about?

In the latest episode of the No Compromises podcast, we discuss the many different forms caching takes in a Laravel application and why reaching for the cache facade is not always the answer.

We walk through caching from the outside in, starting with edge caching via Cloudflare, moving into Laravel's cache facade for third-party API calls, and all the way down to memoization with the Once helper for expensive in-request calculations.

We also make the case that storing data in a database table can be a perfectly valid caching strategy, and that the right question to ask is not whether to cache but what kind of caching actually fits the problem.]]>
            </summary>
                                    <updated>2026-08-28T08:53:53+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[The downside of just forcing HTTPS when behind a reverse proxy]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-08-17-the-downside-of-just-forcing-https-when-behind-a-reverse-proxy" />
            <id>https://masteringlaravel.io/daily/2026-08-17-the-downside-of-just-forcing-https-when-behind-a-reverse-proxy</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Learn why properly configuring Laravel's TrustProxies middleware is superior to simply forcing HTTPS when running behind a reverse proxy. Discover how correct proxy configuration not only fixes URL generation but also preserves real client IPs for accurate rate limiting and logging.]]>
            </summary>
                                    <updated>2026-08-18T14:22:42+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Adopting Laravel's hardened cache default in a large app]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-08-06-adopting-laravels-hardened-cache-default-in-a-large-app" />
            <id>https://masteringlaravel.io/daily/2026-08-06-adopting-laravels-hardened-cache-default-in-a-large-app</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Practical guidance on implementing Laravel 13's hardened cache security in large applications using targeted allow-lists and the handleUnserializableClassUsing method to detect and handle serialisation failures without requiring massive refactoring.]]>
            </summary>
                                    <updated>2026-08-06T15:48:39+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[The sneaky failure mode in Laravel 13's hardened cache]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-08-04-the-sneaky-failure-mode-in-laravel-13s-hardened-cache" />
            <id>https://masteringlaravel.io/daily/2026-08-04-the-sneaky-failure-mode-in-laravel-13s-hardened-cache</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Laravel 13's hardened cache serialisation defaults can cause subtle bugs where objects return as __PHP_Incomplete_Class instead of throwing exceptions. Learn why this happens with stdClass and Eloquent models, and how to properly configure serializable_classes to avoid cache-related failures.]]>
            </summary>
                                    <updated>2026-08-06T15:40:56+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Restoring an explicit empty fillable after a Laravel upgrade]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-05-25-restoring-an-explicit-empty-fillable-after-a-laravel-upgrade" />
            <id>https://masteringlaravel.io/daily/2026-05-25-restoring-an-explicit-empty-fillable-after-a-laravel-upgrade</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Joel shares how to preserve the intent of an empty fillable property when upgrading to Laravel 13, demonstrating the correct syntax for the new #[Fillable] attribute when you want to explicitly prevent mass assignment.]]>
            </summary>
                                    <updated>2026-05-26T08:15:38+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Cloudflare, Laravel, and TLS]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-04-22-republished-cloudflare-laravel-and-tls" />
            <id>https://masteringlaravel.io/daily/2026-04-22-republished-cloudflare-laravel-and-tls</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[A helpful tip about configuring Cloudflare's Full TLS option when using Laravel Forge to avoid endless redirect loops. Essential knowledge for Laravel developers deploying apps with Cloudflare proxy protection.]]>
            </summary>
                                    <updated>2026-04-23T10:28:56+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[When it might be ok to use a mixed type]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=bgSfHH2IBdM" />
            <id>https://www.youtube.com/watch?v=bgSfHH2IBdM</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[When it might be ok to use a mixed type]]>
            </summary>
                                    <updated>2026-04-17T15:26:42+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Guard against accidental duplicate HTTP requests in your tests]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-04-13-guard-against-accidental-duplicate-http-requests-in-your-tests" />
            <id>https://masteringlaravel.io/daily/2026-04-13-guard-against-accidental-duplicate-http-requests-in-your-tests</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Learn how to strengthen your Laravel HTTP tests by using Http::assertSentCount() to catch accidental duplicate API requests that Http::assertSent() alone might miss. This simple technique helps prevent subtle bugs by verifying both the content and count of outgoing HTTP requests in your test suite.]]>
            </summary>
                                    <updated>2026-04-14T06:45:08+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Why I still review every line Claude writes]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-04-02-why-i-still-review-every-line-claude-writes" />
            <id>https://masteringlaravel.io/daily/2026-04-02-why-i-still-review-every-line-claude-writes</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[A thoughtful reflection on why human code review remains essential even for AI-generated code that works correctly. The author shares a real example of working with Claude AI on a Livewire component, highlighting how context and programmer taste still matter for code quality and maintainability.]]>
            </summary>
                                    <updated>2026-04-02T16:00:08+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Are you testing your app or just the framework?]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-03-23-laravel-podcast-are-you-testing-your-app-or-just-the-framework" />
            <id>https://masteringlaravel.io/daily/2026-03-23-laravel-podcast-are-you-testing-your-app-or-just-the-framework</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Joel Clermont and Aaron discuss a crucial testing principle: if you can't make a test fail by changing your application code, it probably shouldn't be in your test suite. They share practical examples and explore how different test types help you focus on testing your actual business logic rather than Laravel's framework code.]]>
            </summary>
                                    <updated>2026-03-23T15:34:34+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[A better way to memoize within a request]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-03-17-a-better-way-to-memoize-within-a-request" />
            <id>https://masteringlaravel.io/daily/2026-03-17-a-better-way-to-memoize-within-a-request</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Learn how Laravel 11's built-in once() helper provides a cleaner way to memoize function results within a single request compared to static variables. This approach automatically handles cache clearing in Laravel Octane and test environments, preventing stale data issues.]]>
            </summary>
                                    <updated>2026-03-19T16:05:47+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[A quick RDS storage tweak for your Laravel app]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-03-12-a-quick-rds-storage-tweak-for-your-laravel-app" />
            <id>https://masteringlaravel.io/daily/2026-03-12-a-quick-rds-storage-tweak-for-your-laravel-app</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Learn how to optimize your Laravel app's database performance by upgrading from AWS RDS gp2 to gp3 storage, which offers better IOPS, throughput, and cost savings. The guide includes practical AWS CLI commands and monitoring tips for a smooth migration with minimal downtime.]]>
            </summary>
                                    <updated>2026-03-12T20:58:09+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Do Eloquent subqueries work across database connections?]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-02-19-do-eloquent-subqueries-work-across-database-connections" />
            <id>https://masteringlaravel.io/daily/2026-02-19-do-eloquent-subqueries-work-across-database-connections</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[In this tip Joel talks us through how changing your query logic and using a different where Clause allows you to use eloquent subqueries across database connections. It's not something I've had to do before but it's an interesting tip for sure.]]>
            </summary>
                                    <updated>2026-02-19T14:58:53+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Be careful with ddRawSql]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-02-05-be-careful-with-ddrawsql" />
            <id>https://masteringlaravel.io/daily/2026-02-05-be-careful-with-ddrawsql</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[A helpful reminder about Laravel's ddRawSql() debugging method and important security considerations. While great for development debugging, the output uses string interpolation rather than prepared statements, so it shouldn't be assumed to be injection-safe or used for building production queries.]]>
            </summary>
                                    <updated>2026-02-20T10:13:16+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Dealing with messy JSON]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-01-28-republished-dealing-with-messy-json" />
            <id>https://masteringlaravel.io/daily/2026-01-28-republished-dealing-with-messy-json</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Joel shares a practical solution for handling problematic JSON data from a FileMaker oData API that contained encoded strings and invisible control characters. He demonstrates how to clean and properly decode double-encoded JSON using regex to strip ASCII control characters and multiple json_decode passes.]]>
            </summary>
                                    <updated>2026-02-06T08:39:08+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Rule::exists doesn't work with scopes]]></title>
            <link rel="alternate" href="https://masteringlaravel.io/daily/2026-01-22-rule-exists-doesnt-work-with-scopes" />
            <id>https://masteringlaravel.io/daily/2026-01-22-rule-exists-doesnt-work-with-scopes</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Learn why Laravel's Rule::exists() validation doesn't work with Eloquent scopes and discover practical alternatives like closure rules for more complex validation scenarios. A helpful tip for Laravel developers dealing with validation rules that need to leverage model scopes.]]>
            </summary>
                                    <updated>2026-02-06T08:40:03+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Why do we like testing so much?]]></title>
            <link rel="alternate" href="https://t.ly/h23UO" />
            <id>https://t.ly/h23UO</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Why do we like testing so much?]]>
            </summary>
                                    <updated>2026-01-22T12:54:50+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[A small gotcha with the `observedBy` attribute]]></title>
            <link rel="alternate" href="https://t.ly/_XG1o" />
            <id>https://t.ly/_XG1o</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[we have Joel Clermont with his great post on a small gotcha with the `observedBy` attribute -]]>
            </summary>
                                    <updated>2026-01-13T22:57:43+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[A use case for the `value-of` PHPDoc type]]></title>
            <link rel="alternate" href="https://t.ly/6v_og" />
            <id>https://t.ly/6v_og</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[A use case for the `value-of` PHPDoc type]]>
            </summary>
                                    <updated>2026-01-13T22:57:42+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[How can you make sure the environment is configured correctly?]]></title>
            <link rel="alternate" href="https://t.ly/Zi_C_" />
            <id>https://t.ly/Zi_C_</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[How can you make sure the environment is configured correctly?]]>
            </summary>
                                    <updated>2026-01-13T22:57:42+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Better types on route parameters]]></title>
            <link rel="alternate" href="https://t.ly/CsH0z" />
            <id>https://t.ly/CsH0z</id>
            <author>
                <name><![CDATA[Joel Clermont]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[we have Joel Clermont with his post "Better types on route parameters" - Another excellent post on some of the newer route parameter attributes that have been released in Laravel 11 -]]>
            </summary>
                                    <updated>2026-01-15T07:46:33+00:00</updated>
        </entry>
    </feed>
