2017 © Pedro Peláez
 

library eloquent-mutant-caster

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

image

danhunsaker/eloquent-mutant-caster

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

  • Monday, November 7, 2016
  • by danhunsaker
  • Repository
  • 1 Watchers
  • 0 Stars
  • 11 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Eloquent MutantCaster

Extend Eloquent's attribute casting feature to support applying a single mutator/accessor pair to multiple fields, (*1)

Install

Use composer:, (*2)

composer require danhunsaker/eloquent-mutant-caster

That's literally it., (*3)

Usage

Include the Danhunsaker\Eloquent\Traits\MutantCaster trait on any model you want to extend:, (*4)

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:, (*5)

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

And use them as you would any of the built-in cast options:, (*6)

    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:, (*7)

    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., (*8)

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., (*9)

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)., (*10)

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

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 (issues, pull requests, etc) are always welcome on GitHub., (*12)

If you find a security issue, please email me directly., (*13)

The Versions

07/11 2016

dev-master

9999999-dev

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

  Sources   Download

MIT

The Requires

 

by Dan Hunsaker

07/11 2016

v0.1.0.1

0.1.0.1

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

  Sources   Download

MIT

The Requires

 

by Dan Hunsaker

13/05 2016

v0.1.0

0.1.0.0

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

  Sources   Download

MIT

The Requires

 

by Dan Hunsaker