Trait to add dynamic custom properties to Eloquent models
Once the trait is installed on the model and migration field is added you can do these things:
$customer = new Customer; // An Eloquent model
$customer
->setCustomProperty('foo', 'bar')
->setCustomProperty('foo2', 'bar2')
->save();
$customer->hasCustomProperty('foo'); // Returns 'true'
$customer->getCustomProperty('foo'); // returns 'bar'
$customer->forgetCustomProperty('foo'); // removes field 'foo' from model array
// Don't forget to persist it!
$customer->save();
You can install the package via composer:
composer require latevaweb/laravel-custom-properties
The required steps to add custom properties to a model are:
- First, you need to add the
LaTevaWeb\CustomProperties\HasCustomProperties
-trait. - It is required to add to your model table the field
$table->json('custom_properties')->nullable();
Here's an example of a prepared model:
use Illuminate\Database\Eloquent\Model;
use LaTevaWeb\CustomProperties\HasCustomProperties;
class NewsItem extends Model
{
use HasCustomProperties;
}
And the migration:
Schema::table('your_table', function (Blueprint $table) {
$table->json('custom_properties')->nullable();
});