PHPackages                             danhunsaker/eloquent-mutant-caster - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. danhunsaker/eloquent-mutant-caster

ActiveLibrary

danhunsaker/eloquent-mutant-caster
==================================

Extend Eloquent's attribute casting feature to support applying a single mutator/accessor pair to multiple fields

v0.1.0.1(9y ago)023MITPHP

Since May 13Pushed 9y ago1 watchersCompare

[ Source](https://github.com/danhunsaker/eloquent-mutant-caster)[ Packagist](https://packagist.org/packages/danhunsaker/eloquent-mutant-caster)[ RSS](/packages/danhunsaker-eloquent-mutant-caster/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (1)Versions (3)Used By (0)

Eloquent MutantCaster
=====================

[](#eloquent-mutantcaster)

Extend Eloquent's attribute casting feature to support applying a single mutator/accessor pair to multiple fields

Install
-------

[](#install)

Use composer:

```
composer require danhunsaker/eloquent-mutant-caster

```

That's literally it.

Usage
-----

[](#usage)

Include the `Danhunsaker\Eloquent\Traits\MutantCaster` trait on any model you want to extend:

```
use Danhunsaker\Eloquent\Traits\MutantCaster;
use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    use MutantCaster;
}
```

Now you can define new types to cast to by simply creating an accessor for your type:

```
    public function getMyNewAwesomeTypeAttribute($value)
    {
        return new MyNewAwesomeType($value);
    }
```

And use them as you would any of the built-in cast options:

```
    protected $casts = [
        'field' => 'my-new-awesome-type',
    ];
```

And to have Eloquent automatically convert the value back on save (assuming your new type doesn't already handle this properly via something like `__toString()`), simply add a mutator for your type:

```
    public function setMyNewAwesomeTypeAttribute($key, $value)
    {
        $this->attributes[$key] = $value->prepForDatabaseStorage();

        return $this;
    }
```

Note that you don't need both an accessor and a mutator - you can simply create whichever of the two you need for your new type, and everything will continue to flow smoothly.

### Caster Traits

[](#caster-traits)

The recommended way to use this library is by writing traits for each of your new types, then including those traits on whichever models will use it. One such trait is included both as an example and for those who wish to use it.

#### CastIP

[](#castip)

`CastIP` is a trait for handling IP addresses. It requires the GMP extension, which allows it to support both IPv4 and IPv6, and stores the address in your database as an integer. Because IPv6 addresses use 128 bits, you may not be able to use your database's integer types to store these addresses - I recommend a `DECIMAL(40, 0)` column instead, but you can use any field type which will hold the value correctly (including a string type).

To use the trait, simply include it in your model, and set your `$casts`property to use `ip` appropriately:

```
use Danhunsaker\Eloquent\Traits\CastIP;
use Danhunsaker\Eloquent\Traits\MutantCaster;
use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    use MutantCaster, CastIP;

    protected $casts = [
        'field' => 'ip',
    ];
}
```

Contributions
-------------

[](#contributions)

Contributions (issues, pull requests, etc) are always welcome on GitHub.

If you find a security issue, please [email me directly](mailto:dan.hunsaker+mucast@gmail.com).

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~178 days

Total

2

Last Release

3473d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1534396?v=4)[Hennik Hunsaker](/maintainers/danhunsaker)[@danhunsaker](https://github.com/danhunsaker)

---

Top Contributors

[![danhunsaker](https://avatars.githubusercontent.com/u/1534396?v=4)](https://github.com/danhunsaker "danhunsaker (2 commits)")

### Embed Badge

![Health badge](/badges/danhunsaker-eloquent-mutant-caster/health.svg)

```
[![Health](https://phpackages.com/badges/danhunsaker-eloquent-mutant-caster/health.svg)](https://phpackages.com/packages/danhunsaker-eloquent-mutant-caster)
```

###  Alternatives

[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k43.5M5.2k](/packages/larastan-larastan)[owen-it/laravel-auditing

Audit changes of your Eloquent models in Laravel

3.4k33.0M95](/packages/owen-it-laravel-auditing)[fumeapp/modeltyper

Generate TypeScript interfaces from Laravel Models

196277.9k](/packages/fumeapp-modeltyper)[casbin/laravel-authz

An authorization library that supports access control models like ACL, RBAC, ABAC in Laravel.

324339.9k4](/packages/casbin-laravel-authz)[pressbooks/pressbooks

Pressbooks is an open source book publishing tool built on a WordPress multisite platform. Pressbooks outputs books in multiple formats, including PDF, EPUB, web, and a variety of XML flavours, using a theming/templating system, driven by CSS.

44643.1k1](/packages/pressbooks-pressbooks)[illuminatech/balance

Provides support for Balance accounting system based on debit and credit principle

16137.4k](/packages/illuminatech-balance)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
