hareland / laravel-immutable-attributes
Make laravel model attributes immutable
v1.0.2
2024-05-26 18:51 UTC
Requires
- php: ^8.1
- illuminate/database: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^7.10
- pestphp/pest: ^1.22
- pestphp/pest-plugin-laravel: ^1.3
- phpunit/phpunit: ^9.0
README
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'