Laravel Enums: Casts, Validation &amp; Eloquent Tips | Mohamed Said        [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://www.msaied.com) [ Home ](https://www.msaied.com) [ Projects ](https://www.msaied.com/projects) [ Articles  ](https://www.msaied.com/articles) [ Certificates ](https://www.msaied.com/certificates) [ Contact ](https://www.msaied.com#contact-section) 

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

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

  [ home ](https://www.msaied.com)    [ articles ](https://www.msaied.com/articles)    Laravel Enums as First-Class Citizens: Casts, Rules, and Eloquent Integration        On this page       1. [  Why Enums Belong at the Domain Layer ](#why-enums-belong-at-the-domain-layer)
2. [  Defining a Backed Enum ](#defining-a-backed-enum)
3. [  Eloquent Casting ](#eloquent-casting)
4. [  Storing Enums in JSON Columns ](#storing-enums-in-json-columns)
5. [  Validation Rules ](#validation-rules)
6. [  Query Scopes with Enums ](#query-scopes-with-enums)
7. [  Sharp Edges ](#sharp-edges)
8. [  Takeaways ](#takeaways)

  ![Laravel Enums as First-Class Citizens: Casts, Rules, and Eloquent Integration](https://cdn.msaied.com/203/54c43da0c2e5005ca99e4bee1b905e6f.png)

  #laravel   #php   #eloquent   #enums  

 Laravel Enums as First-Class Citizens: Casts, Rules, and Eloquent Integration 
===============================================================================

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

       Table of contents

1. [  01   Why Enums Belong at the Domain Layer  ](#why-enums-belong-at-the-domain-layer)
2. [  02   Defining a Backed Enum  ](#defining-a-backed-enum)
3. [  03   Eloquent Casting  ](#eloquent-casting)
4. [  04   Storing Enums in JSON Columns  ](#storing-enums-in-json-columns)
5. [  05   Validation Rules  ](#validation-rules)
6. [  06   Query Scopes with Enums  ](#query-scopes-with-enums)
7. [  07   Sharp Edges  ](#sharp-edges)
8. [  08   Takeaways  ](#takeaways)

 Why Enums Belong at the Domain Layer
------------------------------------

Before PHP 8.1, status columns lived as magic strings or class constants — easy to mistype, impossible to enforce at the type level. Backed enums fix that. A `string` column that only ever holds `'active'`, `'suspended'`, or `'cancelled'` should be represented as a `UserStatus` enum, not a raw string that leaks through every layer of your application.

This article covers the practical wiring: Eloquent casts, validation rules, query scopes, and a few sharp edges worth knowing.

---

Defining a Backed Enum
----------------------

```php
