The laravel-attributes package is a tool designed to help Laravel developers easily manage and implement custom attributes in their projects. It enables you to define attributes directly on Eloquent models, making it simpler to handle dynamic or calculated properties without directly modifying the database schema. With this package, you can create and configure attribute sets for models, making it easier to organize and extend data handling in Laravel applications. It's especially useful for projects that require customizable and flexible data models.
You don't have any stress for attributes! You can create attributes for any model and display like drink water :)
PHP: ^8.0Laravel Framework: ^9.0
| Attributes | L9 | L10 | L11 | L12 |
|---|---|---|---|---|
| 1.0 | ✅ | ✅ | ❌ | ❌ |
| 1.1 | ✅ | ✅ | ❌ | ❌ |
| 1.2 | ✅ | ✅ | ✅ | ❌ |
| 1.3 | ✅ | ✅ | ✅ | ✅ |
composer require milwad/laravel-attributes
After publish config files.
php artisan vendor:publish --provider="Milwad\LaravelAttributes\LaravelAttributesServiceProvider"After publish, you migrate the migration file.
php artisan migrate
First, you use trait in model.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Milwad\LaravelAttributes\Traits\Attributable;
class Product extends Model
{
use HasFactory, Attributable;
}After, you have access to attributes relation and etc... .
If you want to attach attribute to a model, you can use attachAttribute method.
attachAttribute method take a title and value.
$product = Product::query()->create([
'name' => 'milwad',
'content' => 'laravel attributes',
]);
$product->attachAttribute('age', '17');If you have multiple attributes you can use attachAttributes method to save attributes for a model.
$product = Product::query()->create([
'name' => 'milwad',
'content' => 'text',
]);
$data = [
[
'title' => 'milwad',
'value' => 'developer',
],
[
'title' => 'milwad2',
'value' => 'developer2',
],
[
'title' => 'milwad3',
'value' => 'developer3',
],
[
'title' => 'milwad4',
'value' => 'developer4',
],
[
'title' => 'milwad5',
'value' => 'developer5',
],
[
'title' => 'milwad6',
'value' => 'developer6',
],
];
$product->attachAttributes($data);If you want to retrieve attributes from relation you can use attributes.
$product = Product::query()->with('attributes')->get();
$product->attributesMaybe you want to check one model has an attribute value you can use hasAttributeValue method.
if ($product->hasAttributeValue('17')) {
return 'attribute value';
}
return 'no attribute value';Maybe you want to check one model has an attribute title you can use hasAttributeTitle method.
if ($product->hasAttributeTitle('milwad')) {
return 'attribute title';
}
return 'no attribute title';If you want to delete all attributes of one model you can use deleteAllAttribute method.
$product->deleteAllAttribute();If you want to delete specific attribute of a model you can use deleteAttribute method.
$product->deleteAttribute('title', 'value');If you want to delete specific attribute by title you can use deleteAttributeByTitle method.
Maybe you have two attributes with same title, if you delete with this method, will be deleted two attributes
$product->deleteAttributeByTitle('title');If you want to delete specific attribute by value you can use deleteAttributeByValue method.
Maybe you have two attributes with same value, if you delete with this method, will be deleted two attributes
$product->deleteAttributeByValue('value');Run the tests with:
vendor/bin/pest
composer test
composer test-coverageIf you want change migration table name or change default model you can use laravel-attributes config that exists in config folder.
<?php
return [
/*
* Table config
*
* Here it's a config of migrations.
*/
'tables' => [
/*
* Get table name of migration.
*/
'name' => 'attributes',
/*
* Use uuid as primary key.
*/
'uuids' => false, // Also in beta !!!
],
/*
* Model class name for attributes table.
*/
'attributes_model' => \Milwad\LaravelAttributes\Attribute::class,
];- This package is created and modified by Milwad Khosravi for Laravel >= 9 and is released under the MIT License.
This project exists thanks to all the people who contribute. CONTRIBUTING
If you've found a bug regarding security please mail milwad.dev@gmail.com instead of using the issue tracker.
If this package is helpful for you, you can buy a coffee for me :) ❤️
- Iraninan Gateway: https://daramet.com/milwad_khosravi
- Paypal Gateway: SOON
- MetaMask Address:
0xf208a562c5a93DEf8450b656c3dbc1d0a53BDE58
