Laravel Backed Enums, Casting &amp; PHP 8.3 Patterns | Mohamed Said        [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://msaied.com) [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles  ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

       [  ](https://github.com/EG-Mohamed)       

 [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

  [ home ](https://msaied.com)    [ articles ](https://msaied.com/articles)    Laravel Enum Casts, Backed Enums, and Value Semantics in PHP 8.3        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)

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

  #laravel   #php8.3   #enums   #eloquent   #type-safety  

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

     10 Jul 2026      1 min read    ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said  

       Table of contents

  9 sections  

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