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. [Database &amp; ORM](/categories/database)
4. /
5. danhunsaker/eloquent-mutant-caster

ActiveLibrary[Database &amp; ORM](/categories/database)

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 4w 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 31% 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

3522d 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

[kirschbaum-development/eloquent-power-joins

The Laravel magic applied to joins.

1.6k29.9M42](/packages/kirschbaum-development-eloquent-power-joins)[mongodb/laravel-mongodb

A MongoDB based Eloquent model and Query builder for Laravel

7.1k8.0M88](/packages/mongodb-laravel-mongodb)[yajra/laravel-oci8

Oracle DB driver for Laravel via OCI8

8723.1M23](/packages/yajra-laravel-oci8)[staudenmeir/laravel-adjacency-list

Recursive Laravel Eloquent relationships with CTEs

1.6k5.2M33](/packages/staudenmeir-laravel-adjacency-list)[bavix/laravel-wallet

It's easy to work with a virtual wallet.

1.3k1.2M19](/packages/bavix-laravel-wallet)[glushkovds/phpclickhouse-laravel

Adapter of the most popular library https://github.com/smi2/phpClickHouse to Laravel

2051.4M2](/packages/glushkovds-phpclickhouse-laravel)

PHPackages © 2026

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