balajidharma/laravel-attributes

A flexible attribute management system for Laravel models
6,138 2
Install
composer require balajidharma/laravel-attributes
Latest Version:v2.0.1
License:MIT
Last Updated:May 14, 2026
Links: GitHub  ·  Packagist
Maintainer: balajidharma

Overview

Laravel Attributes allows you to add custom attributes to your Laravel models with support for different data types, sorting, and automatic casting.

Table of Contents

Installation

  • Install the package via composer
composer require balajidharma/laravel-attributes
  • Publish the migration with
php artisan vendor:publish --provider="BalajiDharma\LaravelAttributes\AttributesServiceProvider" --tag="migrations"
  • Run the migration
php artisan migrate
  • To Publish the config/attributes.php config file with
php artisan vendor:publish --provider="BalajiDharma\LaravelAttributes\AttributesServiceProvider" --tag="config"
  • Preparing your model To associate views with a model, the model must implement the HasAttributes trait:
<?php
namespace BalajiDharma\LaravelForum\Models;

use BalajiDharma\LaravelAttributes\Traits\HasAttributable;
use Illuminate\Database\Eloquent\Model;

class Thread extends Model
{
    use HasAttributable;
	

Save attribute

  • Save single attibute
$thread->save();

$thread->attachAttribute('color', 'red');

  • Save single attibute with data type

$thread->attachAttribute('color', 'red', 'string');

$thread->attachAttribute('price', '10', 'integer');

$thread->attachAttribute('is_active', '1', 'boolean');

default data type is string

  • Save single attibute with weight

The weight used to sort the attributes


$thread->attachAttribute('color', 'red', 'string', 1);

$thread->attachAttribute('price', '10', 'integer', 2);

$thread->attachAttribute('is_active', '1', 'boolean', 3);

default weight value is 0

  • Save multiple attibute
$data = [
    [
        'name' => 'color',
        'value' => 'red',
        'data_type' => 'string'
    ],
    [
        'name' => 'price',
        'value' => '10',
        'data_type' => 'interger'
    ],
    [
        'name' => 'is_active',
        'value' => '1',
        'data_type' => 'boolean'
    ],
]

$thread->attachAttributes($data);

weight will be added based on array index

Get Attributes

  • Get attributes with query
$thread = Thread::query()->with('attributes')->get();

$thread->attributes;
  • Check attribute value is exists
if ($thread->hasAttributeValue('red')) {
    return 'attribute value';
}

return 'no attribute value';
  • Check attribute name is exists
if ($thread->hasAttributName('color')) {
    return 'attribute name';
}

return 'no attribute name';
  • Check attribute data type is exists
if ($thread->hasAttributDataType('json')) {
    return 'attribute data type';
}

return 'no attribute data type';

Getting Attribute Casting Values

You can get the casting value in data attribute

// Fetch threads with their related attributes
$thread = Thread::query()->with('attributes')->get();

// Access attribute data
foreach ($thread->attributes as $attribute) {
    echo $attribute->data;
}

Delete Attributes

  • Delete all attributes
$thread->deleteAllAttribute();
  • Delete attribute by name and value
$thread->deleteAttribute('color', 'red');
  • Delete attribute by name
$thread->deleteAttributeByName('color');
  • Delete attribute by value
$thread->deleteAttributeByValue('red');
  • Delete attribute by data type
$thread->deleteAttributeByDataType('string');

Laravel Attributes Configuration

This document describes all configuration options available in the attributes.php config file.

Configuration Options

Models

'models' => [
    'attributes' => BalajiDharma\LaravelAttributes\Models\Attributes::class,
],

Defines the model class used to save attributes. You can override this with your own model class if needed.

'table_names' => [
    'attributes' => 'attributes',
],

Specifies the database table name used for storing attributes. Default is 'attributes'.

Validation


'validate_value_before_save' => true,

Disable or enable the value validation based on data type.

Data Type and Casting

'data_types' => [
    ['name' => 'string', 'validation' => 'string', 'cast' => 'string'],
    ['name' => 'integer', 'validation' => 'integer', 'cast' => 'integer'],
    ['name' => 'float', 'validation' => 'numeric', 'cast' => 'float'],
    ['name' => 'boolean', 'validation' => 'boolean', 'cast' => 'boolean'],
    ['name' => 'date', 'validation' => 'date', 'cast' => 'date'],
    ['name' => 'json', 'validation' => 'json', 'cast' => 'array'],
],

Support all the Eloquent Attribute Casting

Credits

This package is based on milwad-dev/laravel-attributes and has been modified to provide additional functionality.

Demo

The "Basic Laravel Admin Penel" starter kit come with Laravel Attributes

Related Packages

hnhdigital-os/laravel-model-attributes

Changes how the Eloquent Model provides attributes.

7 12
grazulex/laravel-arc

A Laravel package for elegant and modern Data Transfer Objects (DTOs) management...

26 9
davidmpeace/immutability

A simple Laravel package that allows you to enforce immutable attributes on Eloq...

20,474 6