hareland/laravel-immutable-attributes

Make laravel model attributes immutable

v1.0.1 2023-07-17 12:40 UTC

This package is auto-updated.

Last update: 2024-04-21 14:01:31 UTC


README

Build Total Downloads

Laravel Immutable Model Attributes

Create immutable attributes on your Laravel models. Simply use the trait.

Installation

Requirements: PHP 8.1+ and Laravel 8+

composer require hareland/laravel-immutable-attributes

Define Immutable Attributes

Define the attributes to be immutable on your model:

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use Hareland\LaravelImmutableAttributes\Traits\HasImmutableAttributes;
 
class Product extends Model
{
    use HasImmutableAttributes;
    
    /**
     * @var array
     */
    protected $immutable = [
        'label',
        'price',
    ];

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

$model = new Product;
 
// Set the attribute 
$model->label = 'abc';
$model->label; // 'abc'
 
// Change it (before-saving)
$model->label = 'abc';
$model->label; // 'abc'
 
// Save it
$model->save();
 
// You can't change its value
$model->label = 'xyz';
$model->label; // 'abc'
 
// You can't update it either
$model->save([
    'label' => 'xyz',
]);
$model->label; // 'abc'

"Buy Me A Coffee"