Laravel Backed Enums, Casting &amp; PHP 8.3 Patterns | Mohamed Said       [Skip to content](#main)  [ ![](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png) Mohamed SaidLaravel Backend Engineer ](https://www.msaied.com/public) - [Home](https://www.msaied.com/public)
- [Projects](https://www.msaied.com/public/projects)
- [Articles](https://www.msaied.com/public/articles)
- [Certificates](https://www.msaied.com/public/certificates)
- [About](https://www.msaied.com/public#about)

           [  Contact](https://www.msaied.com/public#contact) Menu 

Menu
----

Close 

 - [HomeStart here](https://www.msaied.com/public)
- [ProjectsCase studies](https://www.msaied.com/public/projects)
- [ArticlesEngineering notes](https://www.msaied.com/public/articles)
- [CertificatesCredentials](https://www.msaied.com/public/certificates)
- [AboutHow I work](https://www.msaied.com/public#about)
- [ContactGet in touch](https://www.msaied.com/public#contact)

  [Start a conversation](https://www.msaied.com/public#contact) [WhatsApp](https://wa.me/201094619204) [Email](mailto:hello@msaied.com) 

 1. [Home](https://www.msaied.com/public)
2. /
3. [Articles](https://www.msaied.com/public/articles)
4. /
5. Laravel Enum Casts, Backed Enums, and Value Semantics in PHP 8.3

 Laravel Enum Casts, Backed Enums, and Value Semantics in PHP 8.3
=================================================================

 PHP 8.3 backed enums combined with Laravel's native enum casting unlock type-safe domain models. Learn how to wire enums into Eloquent, validation, and API resources without ceremony.

 ![](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp) [Mohamed Said](https://www.msaied.com/public#person) Published 10 Jul 2026 · Updated 10 Jul 2026 · 1 min read

ShareCopy linkCopied

 ![Laravel Enum Casts, Backed Enums, and Value Semantics in PHP 8.3](https://cdn.msaied.com/408/3534df365ffb2c8f6c430180bfaba8f1.png) 

  On this page +1. [Why Backed Enums Deserve More Than a Column Comment](#why-backed-enums-deserve-more-than-a-column-comment)
2. [Defining a Backed Enum with Domain Semantics](#defining-a-backed-enum-with-domain-semantics)
3. [Eloquent Cast: One Line, Full Type Safety](#eloquent-cast-one-line-full-type-safety)
4. [PHP 8.3 Readonly Properties and Enums](#php-83-readonly-properties-and-enums)
5. [Validation: Enum Rule](#validation-enum-rule)
6. [API Resources: Serialize Intentionally](#api-resources-serialize-intentionally)
7. [Querying by Enum Value](#querying-by-enum-value)
8. [Transition Guards on the Enum](#transition-guards-on-the-enum)
9. [Takeaways](#takeaways)

 Why Backed Enums Deserve More Than a Column Comment
---------------------------------------------------

Before PHP 8.1 enums, teams used string constants, `defined()` checks, or custom value-object classes to represent finite domain states. Laravel's native `$casts` support for backed enums removes almost all of that boilerplate — but only if you wire it up correctly across the full request lifecycle: database, validation, and serialization.

This article focuses on the practical gaps that trip up even experienced engineers.

---

Defining a Backed Enum with Domain Semantics
--------------------------------------------

```php
