yieldstudio / eloquent-public-id
Eloquent Public ID Trait for Laravel 9 and above.
Installs: 26 061
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 1
Type:plugin
Requires
- php: ^8.0|^8.1|^8.2
- illuminate/database: ^9|^10.0|^11.0
- illuminate/support: ^9|^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- orchestra/testbench: ^7.0|^8.0|^9.0.2
- pestphp/pest: ^1.21|^2.0
- phpunit/phpunit: ^9.4 || ^10.5 || ^11.0
This package is auto-updated.
Last update: 2024-05-12 14:42:05 UTC
README
Eloquent Public ID Trait for Laravel 9 and above.
This package offers two features:
- one for the models allowing to manage a public ID
- one for Form Request allowing to convert public IDs to IDs
The interest of public IDs is to keep a whole and incremental ID, while having a UUID to expose to the front end, which can be convenient for security reasons.
Installation
composer require yieldstudio/eloquent-public-id
HasPublicId trait
Add a public id field into your table
Schema::create('orders', function (Blueprint $table) { // .. $table->uuid('id')->index()->unique(); // .. });
Use the HasPublicId trait into your models
<?php use Illuminate\Database\Eloquent\Model; use YieldStudio\EloquentPublicId\HasPublicId; class User extends Model { use HasPublicId; }
It's ready to work :)
⚠️ By default the trait will mark the ID field as an hidden field and guard the public ID.
The trait adds some methods to your Model, here they are:
Name | Description |
---|---|
wherePublicId(string $publicId) | A new scope to find with a public ID |
findByPublicId(string $publicId, array $columns = ['*']) | A new static method to get a model by their public ID |
getPublicIdName() | Returns the public ID column name |
getPublicId() | Returns the public ID of the model |
Change the name of the public ID column
<?php class User extends Model { use HasPublicId; public function getPublicIdName(): string { return 'uuid'; } }
Change the generation of the public ID
<?php class User extends Model { use HasPublicId; public function generatePublicId(): string { return Str::random(); } }
ConvertPublicId trait
Allowing to convert public IDs to IDs in a Form Request (before validation).
<?php use Illuminate\Foundation\Http\FormRequest; use YieldStudio\EloquentPublicId\ConvertPublicId; class RequestTest extends FormRequest { use ConvertPublicId; protected array $publicIdsToConvert = [ 'category_id' => Category::class, 'tags.*' => Tag::class, 'postable_id' => 'postable_type', // You can reference another field as model class in case of morph relationship 'suggestions' => [ // Nesting fields is allowed '*' => [ 'post_id' => Post::class, 'tags.*' => Tag::class, 'postable_id' => 'postable_type', ] ] ];
Unit tests
To run the tests, just run composer install
and composer test
.
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security
If you've found a bug regarding security please mail contact@yieldstudio.fr instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.