Laravel Enums as Domain Citizens: Casts &amp; Behaviour | 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 Enums as First-Class Domain Citizens: Typed Casts, Backed Values, and Behaviour

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

 PHP 8.1 backed enums are more than constants. Learn how to attach behaviour, use them as Eloquent casts, embed them in value objects, and write expressive domain logic without a single string literal.

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

ShareCopy linkCopied

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

  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)

 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
