LaravelPackages.net
Acme Inc.
Toggle sidebar
zablockibros/laravel-immutable

Make model attributes immutable

0
0
About zablockibros/laravel-immutable

zablockibros/laravel-immutable is a Laravel package for make model attributes immutable. It currently has 0 GitHub stars and 0 downloads on Packagist. Install it with composer require zablockibros/laravel-immutable. Discover more Laravel packages by zablockibros or browse all Laravel packages to compare alternatives.

Last updated

Laravel Immutable Attributes

Make attributes on your Laravel models immutable...i.e. after the model is created, the value of the immutable attributes cannot change when updating records with Eloquent.

Installation

Requirements: This package requires PHP 7.1.3 or higher and Laravel 5.7

$ composer require zablockibros/laravel-immutable

The package will automatically register its service provider.

Define Immutable Attributes

Define the attributes to be immutable on your model:

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use ZablockiBros\Immutable\Traits\HasImmutableAttributes;
 
class YourModel extends Model
{
    use HasImmutableAttributes;
    
    /**
     * @var array
     */
    protected $immutable = [
        'name',
        'sku',
    ];

In this example, name and sku can be set on model creation, however, the attributes will not persist changes of their value to a database on update.

$model = new YourModel;
 
// set the attribute 
$model->name = 'test';
$model->name; // 'test'
 
// change it (pre-saving)
$model->name = 'changed';
$model->name; // 'changed'
 
// now we save the model
$model->save();
 
// can't change its value now
$model->name = 'nope';
$model->name; // 'changed'
 
// can't update it either
$model->save([
    'name' => 'nope',
]);
$model->name; // 'changed'

MIT License.

Copyright (c) 2019 Justin Zablocki

Star History Chart