Laravel Enums: Casts, Validation &amp; Eloquent Tips | 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 Citizens: Casts, Rules, and Eloquent Integration

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

 PHP 8.1 backed enums unlock type-safe domain modelling in Laravel. Learn how to cast them, validate them, use them in query scopes, and avoid the common pitfalls that leak primitive strings into your domain.

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

ShareCopy linkCopied

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

  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)

 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
