<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <link href="https://tim.macdonald.au" rel="alternate" type="text/html" />
    <link href="https://tim.macdonald.au/feed.xml" rel="self" type="application/atom+xml" />
    <id>https://tim.macdonald.au/feed.xml</id>
    <updated>2026-06-03T09:27:21+10:00</updated>
    <title>Tim MacDonald</title>
    <subtitle>Developing engaging and performant web applications with Laravel and PHP. Love building for the web.</subtitle>
    <author>
        <name>Tim MacDonald</name>
        <uri>https://x.com/timacdonald87</uri>
    </author>
    <icon>https://tim.macdonald.au/assets/profile.png?v=3ed6e2221ca546cc</icon>
    <logo>https://tim.macdonald.au/assets/fallback.png?v=d316b611d14274fa</logo>
            <entry>
            <id>https://tim.macdonald.au/sticky-database-connections-across-requests-with-laravel</id>
            <title>Sticky database connections across requests with Laravel</title>
            <published>2025-09-03T04:20:57+00:00</published>
            <updated>2025-09-03T04:20:57+00:00</updated>
            <summary>Support Laravel&#039;s `sticky` option for read write database replicas across different requests</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/sticky-database-connections-across-requests-with-laravel">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/sticky-database-connections-across-requests-with-laravel" rel="alternate" type="text/html" title="Sticky database connections across requests with Laravel" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/sticky.png?v=0ab74ea5dc0d2b14" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/fake-expectations</id>
            <title>Fake expectations</title>
            <published>2025-04-05T02:41:00+00:00</published>
            <updated>2025-04-05T02:41:00+00:00</updated>
            <summary>A testing fake with named assertions or Pest PHP&#039;s expectation API: ¿Por Qué No Los Dos?</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/fake-expectations">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/fake-expectations" rel="alternate" type="text/html" title="Fake expectations" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/fake-expectations.png?v=113c2aa99777d2cd" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/mark-all-files-unviewed-github</id>
            <title>Mark all files as un-viewed in a GitHub pull request</title>
            <published>2025-03-31T21:52:16+00:00</published>
            <updated>2025-03-31T21:52:16+00:00</updated>
            <summary>Use the &quot;viewed&quot; feature on GitHub PRs? Me too, and I wanted to ability to mark *all* files as un-viewed.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/mark-all-files-unviewed-github">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/mark-all-files-unviewed-github" rel="alternate" type="text/html" title="Mark all files as un-viewed in a GitHub pull request" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/github-viewed-social.png?v=6b88dae6724059c9" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/single-use-tests</id>
            <title>Single-use tests</title>
            <published>2023-10-07T22:31:34+00:00</published>
            <updated>2023-10-07T22:31:34+00:00</updated>
            <summary>Tests I write are usually written in Pest or Jest. I also usually commit them to a code repository - but not all automated tests should be committed. I wrote, what I consider to be an automated test, that was a single-use test. It served it&#039;s purpose and it&#039;ll forever be in my heart, but not in my repository.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/single-use-tests">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/single-use-tests" rel="alternate" type="text/html" title="Single-use tests" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/single-use-tests.png?v=07a4d03d7ace123a" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/fast-database-queries-are-not-always-better</id>
            <title>Fast database queries are not always better</title>
            <published>2023-08-24T00:12:59+00:00</published>
            <updated>2023-08-24T00:12:59+00:00</updated>
            <summary>You probably think fast database queries are good. You also probably think slow database queries are bad. On top of all of these &quot;thinks&quot; you have about database queries - there is a certain Laravel method that, if you’ve seen it, you probably think you understand…but there is a chance you don’t.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/fast-database-queries-are-not-always-better">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/fast-database-queries-are-not-always-better" rel="alternate" type="text/html" title="Fast database queries are not always better" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/fast-queries.png?v=027facd39cca8f43" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/unique-jobs-and-reserving-resources-on-the-queue</id>
            <title>Unique jobs and reserving resources on the queue</title>
            <published>2022-11-20T22:38:49+00:00</published>
            <updated>2022-11-20T22:38:49+00:00</updated>
            <summary>This post covers some interesting features of Laravel&#039;s queueing system. Forcing unique jobs and reserving resources across different job types.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/unique-jobs-and-reserving-resources-on-the-queue">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/unique-jobs-and-reserving-resources-on-the-queue" rel="alternate" type="text/html" title="Unique jobs and reserving resources on the queue" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/dogs-in-a-queue.png?v=36bbecfede2abbbc" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/introducing-lazy-loading-prevention-into-an-existing-laravel-application</id>
            <title>Introducing lazy loading prevention into an existing application</title>
            <published>2021-09-18T11:06:52+00:00</published>
            <updated>2021-09-18T11:06:52+00:00</updated>
            <summary>Laravel&#039;s new lazy loading prevention is fantastic, but depending on the size of your system might be hard to introduce. Here is an approach you might like to try out.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/introducing-lazy-loading-prevention-into-an-existing-laravel-application">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/introducing-lazy-loading-prevention-into-an-existing-laravel-application" rel="alternate" type="text/html" title="Introducing lazy loading prevention into an existing application" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/n-1-detection.png?v=c04e38c9f47b06d9" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/git-rebase-a-love-story</id>
            <title>Git rebase: a love story</title>
            <published>2021-07-29T05:03:05+00:00</published>
            <updated>2021-07-29T05:03:05+00:00</updated>
            <summary>A (not so lightning) talk about git rebase and the things it enables.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/git-rebase-a-love-story">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/git-rebase-a-love-story" rel="alternate" type="text/html" title="Git rebase: a love story" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/rebase.png?v=d37c1071fe53ce99" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/would-you-like-a-fry-with-that-using-a-has-one-over-a-has-many-relationship-in-laravel</id>
            <title>Would you like fry with that? Using a HasOne over a HasMany relationship in Laravel</title>
            <published>2021-03-14T03:12:42+00:00</published>
            <updated>2021-03-14T03:12:42+00:00</updated>
            <summary>When you are working with a one-to-many relationship, it is sometimes the case that a particular instance on the &quot;many&quot; side of the relationship is flagged as unique and important to your system in some way.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/would-you-like-a-fry-with-that-using-a-has-one-over-a-has-many-relationship-in-laravel">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/would-you-like-a-fry-with-that-using-a-has-one-over-a-has-many-relationship-in-laravel" rel="alternate" type="text/html" title="Would you like fry with that? Using a HasOne over a HasMany relationship in Laravel" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/has-one-has-many.png?v=5be7d77b0415a5fe" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/follow-the-eloquent-road-laracon-talk</id>
            <title>Follow the Eloquent road</title>
            <published>2021-02-21T22:49:20+00:00</published>
            <updated>2021-02-21T22:49:20+00:00</updated>
            <summary>Conference talk given at the 2020 LaraconUS / Online conference. Come for a journey as I show you down the path I&#039;ve taken along the Eloquent road.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/follow-the-eloquent-road-laracon-talk">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/follow-the-eloquent-road-laracon-talk" rel="alternate" type="text/html" title="Follow the Eloquent road" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/yellow-brick.png?v=3aa6d4f1970936b4" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/using-laravels-policies-route-model-binding-without-eloquent</id>
            <title>Using Laravel&#039;s Policies and Route Model Binding without Eloquent</title>
            <published>2020-10-15T22:24:48+00:00</published>
            <updated>2020-10-15T22:24:48+00:00</updated>
            <summary>I always thought Laravel&#039;s Policies and Route Model Binding were only able to be used with Eloquent models. Turns out I was wrong</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/using-laravels-policies-route-model-binding-without-eloquent">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/using-laravels-policies-route-model-binding-without-eloquent" rel="alternate" type="text/html" title="Using Laravel&#039;s Policies and Route Model Binding without Eloquent" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/popo.png?v=04d97e96ffd005be" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/gracefully-deprecating-foreign-keys-in-eloquent</id>
            <title>Gracefully deprecating foreign keys for a polymorphic relationship</title>
            <published>2020-10-10T06:29:52+00:00</published>
            <updated>2020-10-10T06:29:52+00:00</updated>
            <summary>A &quot;note to self&quot; on how to best handle moving from a classic foreign key constrained relationship, to a polymorphic relationship in Eloquent, without impacting the end user.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/gracefully-deprecating-foreign-keys-in-eloquent">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/gracefully-deprecating-foreign-keys-in-eloquent" rel="alternate" type="text/html" title="Gracefully deprecating foreign keys for a polymorphic relationship" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/deprecate-keys.png?v=d0ebe8d273332ce0" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/avoid-false-positives-by-utiliting-magic-values-in-your-tests</id>
            <title>Avoid false positives by utiliting magic values in your tests</title>
            <published>2020-06-08T02:00:00+00:00</published>
            <updated>2020-06-08T02:00:00+00:00</updated>
            <summary>It can be very hard to spot a false positive within a test. So how do you avoid them?</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/avoid-false-positives-by-utiliting-magic-values-in-your-tests">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/avoid-false-positives-by-utiliting-magic-values-in-your-tests" rel="alternate" type="text/html" title="Avoid false positives by utiliting magic values in your tests" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/magic-values.png?v=60493cce68533579" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/sharing-php-cs-fixer-rules-across-projects-and-teams</id>
            <title>Sharing PHP-CS-Fixer rules across projects and teams</title>
            <published>2020-04-28T15:00:00+00:00</published>
            <updated>2020-04-28T15:00:00+00:00</updated>
            <summary>This tutorial will show you how you can setup a repo that contains all your rules, and easily share them with others.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/sharing-php-cs-fixer-rules-across-projects-and-teams">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/sharing-php-cs-fixer-rules-across-projects-and-teams" rel="alternate" type="text/html" title="Sharing PHP-CS-Fixer rules across projects and teams" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/rethinking-middleware.png?v=809ea48a09712725" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/rethinking-laravels-middleware-argument-api</id>
            <title>Rethinking Laravel&#039;s middleware argument API</title>
            <published>2020-04-16T00:00:00+00:00</published>
            <updated>2020-04-16T00:00:00+00:00</updated>
            <summary>String concatenation is the current way we can pass arguments to Laravel middleware - but what if there was another way</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/rethinking-laravels-middleware-argument-api">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/rethinking-laravels-middleware-argument-api" rel="alternate" type="text/html" title="Rethinking Laravel&#039;s middleware argument API" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/rethinking-middleware.png?v=809ea48a09712725" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/query-scopes-meet-action-scopes</id>
            <title>Query scopes, meet action scopes</title>
            <published>2019-10-11T23:00:00+00:00</published>
            <updated>2019-10-11T23:00:00+00:00</updated>
            <summary>Action scopes are...well...just query scopes really, but instead of filtering they take an action. It&#039;s just a random name I&#039;ve given them to differentiate them from regular filtering based query scopes in my projects.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/query-scopes-meet-action-scopes">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/query-scopes-meet-action-scopes" rel="alternate" type="text/html" title="Query scopes, meet action scopes" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/action-scopes.png?v=73037914d86eed51" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/the-case-laravel-testcase</id>
            <title>The case of the Laravel TestCase</title>
            <published>2019-06-28T04:00:00+00:00</published>
            <updated>2019-06-28T04:00:00+00:00</updated>
            <summary>Deep diving the Laravel TestCase and pushing it to the limit, and yea...that&#039;s the title I went with 🕵️‍♂️</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/the-case-laravel-testcase">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/the-case-laravel-testcase" rel="alternate" type="text/html" title="The case of the Laravel TestCase" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/laravel-testcase.png?v=08b7ba3483c94b45" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/dedicated-eloquent-model-query-builders</id>
            <title>Dedicated query builders for Eloquent models</title>
            <published>2019-04-27T01:11:00+00:00</published>
            <updated>2019-04-27T01:11:00+00:00</updated>
            <summary>As my current project grew, so did my models. In a hunt for thinner models, I realised it was possible to extract model scopes to a dedicated query builder class. I&#039;ll show you how to do this, and a few things to keep in mind if you implement this refactor.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/dedicated-eloquent-model-query-builders">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/dedicated-eloquent-model-query-builders" rel="alternate" type="text/html" title="Dedicated query builders for Eloquent models" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/dedicate-eloquent-model-query-builders.png?v=e26fd14db87b1804" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/performance-monitoring-laravel-forge-deployed-application</id>
            <title>Simple performance monitoring a Laravel Forge deployed application</title>
            <published>2019-02-10T22:00:00+00:00</published>
            <updated>2019-02-10T22:00:00+00:00</updated>
            <summary>Monitoring your web application&#039;s performance is key to ensuring you provide a good experience for your users. Here is a tip to help you see where your app is slow on a Laravel Forge deployed server.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/performance-monitoring-laravel-forge-deployed-application">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/performance-monitoring-laravel-forge-deployed-application" rel="alternate" type="text/html" title="Simple performance monitoring a Laravel Forge deployed application" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/performance-monitoring.png?v=8ce560fe75073773" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/php-be-all-like-that-nonexistent-class-be-cool</id>
            <title>PHP be all like: that nonexistent class be cool</title>
            <published>2019-01-23T09:00:00+00:00</published>
            <updated>2019-01-23T09:00:00+00:00</updated>
            <summary>There are certain scenarios where PHP does not check or error if a class you reference does not exist. These are their stories. *dun-dun*</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/php-be-all-like-that-nonexistent-class-be-cool">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/php-be-all-like-that-nonexistent-class-be-cool" rel="alternate" type="text/html" title="PHP be all like: that nonexistent class be cool" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/class-not-imported.png?v=b1f4d996715424a6" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/tips-speed-up-your-phpunit-tests</id>
            <title>Tips to speed up your PHPUnit tests</title>
            <published>2019-01-08T14:00:00+00:00</published>
            <updated>2019-01-08T14:00:00+00:00</updated>
            <summary>Having a fast test suite can be just as important as having a fast application. Here are some ways to make your test suite run faster.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/tips-speed-up-your-phpunit-tests">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/tips-speed-up-your-phpunit-tests" rel="alternate" type="text/html" title="Tips to speed up your PHPUnit tests" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/laravel-testcase.png?v=08b7ba3483c94b45" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/global-application-settings</id>
            <title>Global application settings</title>
            <published>2018-11-27T14:00:00+00:00</published>
            <updated>2018-11-27T14:00:00+00:00</updated>
            <summary>In applications it is often useful to have a way to store some global settings. This post outlines my approach using a Spatie package to manage the values instead of Eloquent.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/global-application-settings">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/global-application-settings" rel="alternate" type="text/html" title="Global application settings" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/collection-voices.png?v=306842175ed3b509" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/giving-collections-a-voice</id>
            <title>Giving collections a voice</title>
            <published>2018-11-26T04:04:53+00:00</published>
            <updated>2018-11-26T04:04:53+00:00</updated>
            <summary>Laravel collections have become an essential part of my codebases and I couldn&#039;t imagine working without them. I have found giving collections the voice of the problem domain makes for a much nicer API when compared to the generic collection methods.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/giving-collections-a-voice">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/giving-collections-a-voice" rel="alternate" type="text/html" title="Giving collections a voice" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/collection-voices.png?v=306842175ed3b509" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/my-feature-test-suite-setup</id>
            <title>My feature test suite setup</title>
            <published>2018-11-11T01:00:00+00:00</published>
            <updated>2018-11-11T01:00:00+00:00</updated>
            <summary>I do love a good feature test suite. I especially like them to be fast and, most importantly, trustworthy! As my approach has matured, and become stable, I thought I&#039;d share how I go about setting things up.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/my-feature-test-suite-setup">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/my-feature-test-suite-setup" rel="alternate" type="text/html" title="My feature test suite setup" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/feature-tests.png?v=bf7b75011c1a9853" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/overring-laravel-mix-during-testing-in-5-8</id>
            <title>Overriding Laravel Mix during testing in 5.8</title>
            <published>2018-11-04T01:00:00+00:00</published>
            <updated>2018-11-04T01:00:00+00:00</updated>
            <summary>Laravel&#039;s global mix helper function can be replaced during testing in Laravel 5.8. Here is why, and how, you might want to do this.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/overring-laravel-mix-during-testing-in-5-8">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/overring-laravel-mix-during-testing-in-5-8" rel="alternate" type="text/html" title="Overriding Laravel Mix during testing in 5.8" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/mix.png?v=62f716d8fe48a63a" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/loading-eloquent-relationship-counts</id>
            <title>Loading Eloquent relationship counts</title>
            <published>2018-11-01T12:00:00+11:00</published>
            <updated>2018-11-01T12:00:00+11:00</updated>
            <summary>There are several ways to load relationship counts on eloquent models. I&#039;m going to explore the options and introduce you to a new one.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/loading-eloquent-relationship-counts">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/loading-eloquent-relationship-counts" rel="alternate" type="text/html" title="Loading Eloquent relationship counts" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/loading-counts.png?v=9dc9f707efac47f1" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/versatile-response-objects-laravel</id>
            <title>Versatile response objects in Laravel</title>
            <published>2018-05-11T02:00:00+00:00</published>
            <updated>2018-05-11T02:00:00+00:00</updated>
            <summary>I&#039;ve found that introducing dedicated response objects that can handle multiple response formats is a really nice pattern to cleanup my controllers</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/versatile-response-objects-laravel">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/versatile-response-objects-laravel" rel="alternate" type="text/html" title="Versatile response objects in Laravel" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/response-objects.png?v=83be4029c9858eb6" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/laravel-cashier-helping-hand</id>
            <title>Laravel Cashier: a helping hand</title>
            <published>2018-05-04T02:00:00+00:00</published>
            <updated>2018-05-04T02:00:00+00:00</updated>
            <summary>If you are creating a Laravel app with subscriptions via Stripe - Laravel Cashier might just be the helping hand you were looking for.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/laravel-cashier-helping-hand">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/laravel-cashier-helping-hand" rel="alternate" type="text/html" title="Laravel Cashier: a helping hand" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/laravel-cashier.png?v=8bbfac67e45adcb9" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/backup-multiple-sites-frameworks-laravel-backup</id>
            <title>Backup multiple sites and frameworks with Laravel Backup</title>
            <published>2017-10-31T01:00:00+00:00</published>
            <updated>2017-10-31T01:00:00+00:00</updated>
            <summary>Using Spatie&#039;s Laravel Backup package you can backup several sites on a server from a single app install, including Laravel apps and WordPress sites.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/backup-multiple-sites-frameworks-laravel-backup">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/backup-multiple-sites-frameworks-laravel-backup" rel="alternate" type="text/html" title="Backup multiple sites and frameworks with Laravel Backup" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/backup-multiple-sites-frameworks-laravel-backup.png?v=5240eedca9f694fa" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/foreign-key-validation-rule</id>
            <title>Foreign key validation rule</title>
            <published>2017-04-30T03:27:00+00:00</published>
            <updated>2017-04-30T03:27:00+00:00</updated>
            <summary>A foreign key validation rule for the Laravel Validator that helps wrap up the &#039;exists&#039; rule with a bit of syntactic sugar. Probably not fantastic to work with in the traditional fashion, but using the rule builder package...it looks gooooood!</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/foreign-key-validation-rule">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/foreign-key-validation-rule" rel="alternate" type="text/html" title="Foreign key validation rule" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/foreign-key-validation-rule.png?v=16f92f336aac5d60" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/enforcing-valid-data-access-from-form-request-object</id>
            <title>Enforcing valid data access from a form request object</title>
            <published>2017-04-10T02:00:00+00:00</published>
            <updated>2017-04-10T02:00:00+00:00</updated>
            <summary>A little trick I have been implementing recently to ensure that data accessed from a Laravel request object has first been validated.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/enforcing-valid-data-access-from-form-request-object">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/enforcing-valid-data-access-from-form-request-object" rel="alternate" type="text/html" title="Enforcing valid data access from a form request object" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/accessing-validated-request-inputs.png?v=5e051a1ee00f8133" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/writing-a-zero-downtime-deployment-script</id>
            <title>Writing a zero downtime deployment script</title>
            <published>2017-03-28T01:00:00+00:00</published>
            <updated>2017-03-28T01:00:00+00:00</updated>
            <summary>Having never written a shell script before, I thought I&#039;d try and level up my dev skills by writing a simple deployment script for my website and my clients websites. The outcome: FlipIt™</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/writing-a-zero-downtime-deployment-script">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/writing-a-zero-downtime-deployment-script" rel="alternate" type="text/html" title="Writing a zero downtime deployment script" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/zero-downtime-deployment.png?v=2aeb89e4c4e85bd9" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/fluent-validation-rules-for-laravel</id>
            <title>Fluent validation rules for Laravel</title>
            <published>2016-12-31T12:58:00+00:00</published>
            <updated>2016-12-31T12:58:00+00:00</updated>
            <summary>Laravel validation rules are great, but wouldn&#039;t it be awesome if there was a fluent interface for all the rules.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/fluent-validation-rules-for-laravel">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/fluent-validation-rules-for-laravel" rel="alternate" type="text/html" title="Fluent validation rules for Laravel" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/fluent-validation-rule-builder.png?v=e7e7b89f4cd5e9d6" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
            <entry>
            <id>https://tim.macdonald.au/being-a-developer-in-regional-australia</id>
            <title>Being a developer in regional Australia</title>
            <published>2016-12-30T03:49:00+00:00</published>
            <updated>2016-12-30T03:49:00+00:00</updated>
            <summary>If you&#039;re in the Riverina and wanna meet up to discuss all things software - join our local developer Meetup.</summary>
            <content type="html"><![CDATA[Check out <a href="https://tim.macdonald.au/being-a-developer-in-regional-australia">the full article</a>.]]></content>
            <link href="https://tim.macdonald.au/being-a-developer-in-regional-australia" rel="alternate" type="text/html" title="Being a developer in regional Australia" />
            <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://tim.macdonald.au/assets/developer-meetup.png?v=d8cc54c98240c947" />
            <author>
                <name>Tim MacDonald</name>
                <uri>https://x.com/timacdonald87</uri>
            </author>
        </entry>
    </feed>
