Laravel Enums as Domain Citizens: Casts &amp; Behaviour | 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 Enums as First-Class Domain Citizens: Typed Casts, Backed Values, and Behaviour        On this page       1. [  Stop Treating Enums as Fancy Constants ](#stop-treating-enums-as-fancy-constants)
2. [  Defining a Behaviour-Rich Backed Enum ](#defining-a-behaviour-rich-backed-enum)
3. [  Eloquent Cast — Zero Boilerplate ](#eloquent-cast-zero-boilerplate)
4. [  Enum-Aware Query Scopes ](#enum-aware-query-scopes)
5. [  Validation Rule from Enum Cases ](#validation-rule-from-enum-cases)
6. [  Embedding Enums in Value Objects ](#embedding-enums-in-value-objects)
7. [  Pest Snapshot: Testing Enum Behaviour ](#pest-snapshot-testing-enum-behaviour)
8. [  Key Takeaways ](#key-takeaways)

  ![Laravel Enums as First-Class Domain Citizens: Typed Casts, Backed Values, and Behaviour](https://cdn.msaied.com/266/81a05f630d54004d2a6689a02d6f0579.png)

  #laravel   #php   #enums   #domain-driven-design   #eloquent  

 Laravel Enums as First-Class Domain Citizens: Typed Casts, Backed Values, and Behaviour 
=========================================================================================

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

       Table of contents

1. [  01   Stop Treating Enums as Fancy Constants  ](#stop-treating-enums-as-fancy-constants)
2. [  02   Defining a Behaviour-Rich Backed Enum  ](#defining-a-behaviour-rich-backed-enum)
3. [  03   Eloquent Cast — Zero Boilerplate  ](#eloquent-cast-zero-boilerplate)
4. [  04   Enum-Aware Query Scopes  ](#enum-aware-query-scopes)
5. [  05   Validation Rule from Enum Cases  ](#validation-rule-from-enum-cases)
6. [  06   Embedding Enums in Value Objects  ](#embedding-enums-in-value-objects)
7. [  07   Pest Snapshot: Testing Enum Behaviour  ](#pest-snapshot-testing-enum-behaviour)
8. [  08   Key Takeaways  ](#key-takeaways)

 Stop Treating Enums as Fancy Constants
--------------------------------------

Most Laravel codebases adopt backed enums, swap `string` constants for them, and call it done. That leaves the best part on the table: enums are first-class objects that can carry methods, implement interfaces, and integrate directly with Eloquent, validation, and your domain layer.

This article walks through a concrete `OrderStatus` domain, showing how to push logic into the enum itself rather than scattering it across services and controllers.

---

Defining a Behaviour-Rich Backed Enum
-------------------------------------

```php
