<?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>2023-12-06T23:13:22+00: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://twitter.com/timacdonald87</uri>
    </author>
    <icon>https://tim.macdonald.au/images/profile.png</icon>
    <logo>https://tim.macdonald.au/images/pages/fallback.png</logo>
            <entry>
            <id>https://tim.macdonald.au/single-use-tests</id>
            <title>Single-use Tests</title>
            <published>2023-10-08T09:31:34+11:00</published>
            <updated>2023-10-08T10:03:01+11: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/images/posts/single-use-tests.png" />
        </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-24T10:12:59+10:00</published>
            <updated>2023-09-10T14:30:54+10: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/images/posts/fast-queries.png" />
        </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-21T09:38:49+11:00</published>
            <updated>2022-11-21T16:17:55+11: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/images/posts/dogs-in-a-queue.png" />
        </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-18T21:06:52+10:00</published>
            <updated>2023-11-05T15:21:26+11: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/images/posts/n-1-detection.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/git-rebase-a-love-story</id>
            <title>Git rebase: A love story</title>
            <published>2021-07-29T15:03:05+10:00</published>
            <updated>2021-07-29T16:32:41+10: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/images/posts/rebase.png" />
        </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-14T14:12:42+11:00</published>
            <updated>2021-07-29T11:33:20+10: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/images/posts/has-one-has-many.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/follow-the-eloquent-road-laracon-talk</id>
            <title>Follow the Eloquent road</title>
            <published>2021-02-22T09:49:20+11:00</published>
            <updated>2023-11-05T15:21:26+11: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/images/posts/yellow-brick.png" />
        </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-16T09:24:48+11:00</published>
            <updated>2023-09-10T14:30:54+10: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/images/posts/popo.png" />
        </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-10T17:29:52+11:00</published>
            <updated>2023-09-10T14:30:54+10: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/images/posts/deprecate-keys.png" />
        </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-08T12:00:00+10:00</published>
            <updated>2021-07-29T16:18:06+10: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/images/posts/magic-values.png" />
        </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-29T01:00:00+10:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/pages/fallback.png" />
        </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-16T10:00:00+10:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/rethinking-middleware.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/query-scopes-meet-action-scopes</id>
            <title>Query scopes, meet action scopes</title>
            <published>2019-10-12T10:00:00+11:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/action-scopes.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/the-case-laravel-testcase</id>
            <title>The case of the Laravel TestCase</title>
            <published>2019-06-28T14:00:00+10:00</published>
            <updated>2023-09-19T13:35:19+10: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/images/posts/laravel-testcase.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/dedicated-eloquent-model-query-builders</id>
            <title>Dedicated query builders for Eloquent models</title>
            <published>2019-04-27T11:11:00+10:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/dedicate-eloquent-model-query-builders.png" />
        </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-11T09:00:00+11:00</published>
            <updated>2021-07-29T11:33:20+10: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/images/posts/performance-monitoring.png" />
        </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-23T20:00:00+11:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/class-not-imported.png" />
        </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-09T01:00:00+11:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/pages/fallback.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/global-application-settings</id>
            <title>Global application settings</title>
            <published>2018-11-28T01:00:00+11:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/pages/fallback.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/giving-collections-a-voice</id>
            <title>Giving collections a voice</title>
            <published>2018-11-26T15:04:53+11:00</published>
            <updated>2023-11-05T15:21:26+11: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/images/posts/collection-voices.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/my-feature-test-suite-setup</id>
            <title>My feature test suite setup</title>
            <published>2018-11-11T12:00:00+11:00</published>
            <updated>2023-09-19T13:35:19+10: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/images/posts/feature-tests.png" />
        </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-04T12:00:00+11:00</published>
            <updated>2023-09-19T13:35:19+10: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/images/posts/mix.png" />
        </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>2021-07-09T13:08:17+10: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/images/posts/loading-counts.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/versatile-response-objects-laravel</id>
            <title>Versatile response objects in Laravel</title>
            <published>2018-05-11T12:00:00+10:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/response-objects.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/laravel-cashier-helping-hand</id>
            <title>Laravel Cashier: a helping hand</title>
            <published>2018-05-04T12:00:00+10:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/laravel-cashier.png" />
        </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-31T12:00:00+11:00</published>
            <updated>2021-07-29T11:33:20+10: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/images/posts/backup-multiple-sites-frameworks-laravel-backup.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/foreign-key-validation-rule</id>
            <title>Foreign key validation rule</title>
            <published>2017-04-30T13:27:00+10:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/foreign-key-validation-rule.png" />
        </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-10T12:00:00+10:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/accessing-validated-request-inputs.png" />
        </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-28T12:00:00+11:00</published>
            <updated>2021-07-29T11:33:20+10: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/images/posts/zero-downtime-deployment.png" />
        </entry>
            <entry>
            <id>https://tim.macdonald.au/fluent-validation-rules-for-laravel</id>
            <title>Fluent validation rules for Laravel</title>
            <published>2016-12-31T23:58:00+11:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/fluent-validation-rule-builder.png" />
        </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-30T14:49:00+11:00</published>
            <updated>2021-07-09T13:08:17+10: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/images/posts/developer-meetup.png" />
        </entry>
    </feed>
