<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix" -->

---
title: Laravel Just Changed Some of Its Best Practices | daily.dev
description: Taylor Otwell personally revised Laravel Boost&#x27;s AI coding guidelines and best practices across two commits: &#x27;update best practices&#x27; and &#x27;controller resource...
canonical: https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Laravel Just Changed Some of Its Best Practices | daily.dev
og:description: Taylor Otwell personally revised Laravel Boost&#x27;s AI coding guidelines and best practices across two commits: &#x27;update best practices&#x27; and &#x27;controller resource...
og:url: https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix
og:image: https://api.daily.dev/og/posts/eDbiUknIx.png
og:image:alt: Laravel Just Changed Some of Its Best Practices
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel Just Changed Some of Its Best Practices

**[Laravel Daily](https://daily.dev/sources/laraveldaily)** · 7 min read · 3 upvotes · 1 comments

## Summary

Taylor Otwell personally revised Laravel Boost's AI coding guidelines and best practices across two commits: 'update best practices' and 'controller resource guidance'. The controller resource commit codifies 'cruddy by design' (a philosophy from Adam Wathan's 2017 Laracon talk), pushing custom controller actions like publish/approve into separate single-purpose controllers rather than adding non-CRUD methods. The best practices commit softens many previously strict rules into 'it depends' guidance: comparing whereHas vs whereIn subqueries instead of mandating one, considering composite/correlated indexes rather than always creating them, preferring dependency injection only when appropriate instead of always, removing the under-10-lines-per-controller-method rule in favor of focusing on HTTP concerns, requiring idempotency guarantees before retrying API calls, and eager loading only when it meaningfully avoids N+1 problems rather than universally. The overall shift moves the guidelines away from rigid correct/incorrect prescriptions toward context-dependent, measured recommendations for AI coding agents.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=8XMoj9xa5TM>

## Questions this post answers

### What changed in Laravel Boost's best practices guidelines for controllers?

Laravel Boost now enforces resourceful, cruddy controllers restricted to the seven standard resource methods (index, create, store, show, edit, update, destroy). Custom actions like publish or approve are no longer added as extra methods on an existing controller but must live in their own dedicated controller, such as a PublishPodcastController with a store method, following the cruddy-by-design philosophy Adam Wathan introduced at Laracon in 2017.

_Developers wiring AI agents to follow Laravel conventions can track guideline shifts like this on daily.dev._

### Does Laravel Boost still recommend always eager loading relationships to avoid N+1 queries?

No, the guideline was softened from an absolute rule to a conditional one. It now says to eager load relationships before iterating specifically when doing so avoids lazy loading that is unreasonable, since lazy loading a single related model can be perfectly fine. The same conditional shift applies to database indexing, which now calls for adding indexes based on measured query patterns rather than blindly indexing every where or order by column.

_Laravel developers tuning query performance can follow rule changes like this via daily.dev._

### Should I always use retry with backoff when calling external APIs in Laravel?

No, retrying a state-changing request is only safe if the remote API guarantees protection against duplicate records, i.e., idempotency. Laravel Boost's updated best practices changed the old blanket recommendation to always retry with backoff into a warning that retries are unsafe without an idempotency guarantee, since retrying can otherwise create duplicate records.

_Teams building resilient API integrations can watch for guidance shifts like this on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@rgodiyal** · 0 upvotes

> ![GIF](https://static.klipy.com/ii/84b4c0b02782dda9051003f9e36484ec/6a/3a/Mw9GubVu.gif)

---

Tags: [#ai-agents](https://daily.dev/tags/ai-agents), [#php](https://daily.dev/tags/php), [#laravel](https://daily.dev/tags/laravel)

[View this post on daily.dev](https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Laravel Just Changed Some of Its Best Practices","url":"https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix"},"datePublished":"2026-09-01T05:27:44.855Z","dateModified":"2026-09-14T07:08:53.164Z","description":"Taylor Otwell personally revised Laravel Boost's AI coding guidelines and best practices across two commits: 'update best practices' and 'controller resource...","image":"https://i.ytimg.com/vi/8XMoj9xa5TM/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/8XMoj9xa5TM/sddefault.jpg","isAccessibleForFree":true,"articleSection":"Laravel Daily","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Laravel Daily","logo":"https://media.daily.dev/image/upload/s--vzdgNGfl--/f_auto/v1725044498/logos/laraveldaily","url":"https://daily.dev/sources/laraveldaily"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"ai-agents,php,laravel","timeRequired":"PT7M","video":{"@type":"VideoObject","name":"Laravel Just Changed Some of Its Best Practices","description":"Taylor Otwell personally revised Laravel Boost's AI coding guidelines and best practices across two commits: 'update best practices' and 'controller resource...","thumbnailUrl":"https://i.ytimg.com/vi/8XMoj9xa5TM/sddefault.jpg","uploadDate":"2026-09-01T05:27:44.855Z","duration":"PT7M","url":"https://api.daily.dev/r/eDbiUknIx","embedUrl":"https://www.youtube.com/embed/8XMoj9xa5TM"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Laravel Daily","item":"https://daily.dev/sources/laraveldaily"},{"@type":"ListItem","position":3,"name":"Laravel Just Changed Some of Its Best Practices"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix","comment":[{"@type":"Comment","text":"","datePublished":"2026-09-10T05:37:36.107Z","url":"https://daily.dev/posts/eDbiUknIx#c-ZhuZgxNxp","author":{"@type":"Person","name":"Rahul Godiyal","url":"https://daily.dev/rgodiyal","image":"https://lh3.googleusercontent.com/a/ACg8ocJUbWuKor0twjzGVmI3sXXFcW_cr9pu-M4_NN4eu3TOF-7Cf9o=s96-c"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/laravel-just-changed-some-of-its-best-practices-edbiuknix#faq","mainEntity":[{"@type":"Question","name":"What changed in Laravel Boost's best practices guidelines for controllers?","acceptedAnswer":{"@type":"Answer","text":"Laravel Boost now enforces resourceful, cruddy controllers restricted to the seven standard resource methods (index, create, store, show, edit, update, destroy). Custom actions like publish or approve are no longer added as extra methods on an existing controller but must live in their own dedicated controller, such as a PublishPodcastController with a store method, following the cruddy-by-design philosophy Adam Wathan introduced at Laracon in 2017. Developers wiring AI agents to follow Laravel conventions can track guideline shifts like this on daily.dev."}},{"@type":"Question","name":"Does Laravel Boost still recommend always eager loading relationships to avoid N+1 queries?","acceptedAnswer":{"@type":"Answer","text":"No, the guideline was softened from an absolute rule to a conditional one. It now says to eager load relationships before iterating specifically when doing so avoids lazy loading that is unreasonable, since lazy loading a single related model can be perfectly fine. The same conditional shift applies to database indexing, which now calls for adding indexes based on measured query patterns rather than blindly indexing every where or order by column. Laravel developers tuning query performance can follow rule changes like this via daily.dev."}},{"@type":"Question","name":"Should I always use retry with backoff when calling external APIs in Laravel?","acceptedAnswer":{"@type":"Answer","text":"No, retrying a state-changing request is only safe if the remote API guarantees protection against duplicate records, i.e., idempotency. Laravel Boost's updated best practices changed the old blanket recommendation to always retry with backoff into a warning that retries are unsafe without an idempotency guarantee, since retrying can otherwise create duplicate records. Teams building resilient API integrations can watch for guidance shifts like this on daily.dev."}}]}
```

