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.
composer require yieldstudio/eloquent-public-id
Schema::create('orders', function (Blueprint $table) {
// ..
$table->uuid('id')->index()->unique();
// ..
});
<?php
use Illuminate\Database\Eloquent\Model;
use YieldStudio\EloquentPublicId\HasPublicId;
class User extends Model
{
use HasPublicId;
}
It's ready to work :)
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 |
<?php
class User extends Model
{
use HasPublicId;
public function getPublicIdName(): string
{
return 'uuid';
}
}
<?php
class User extends Model
{
use HasPublicId;
public function generatePublicId(): string
{
return Str::random();
}
}
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',
]
]
];
To run the tests, just run composer install
and composer test
.
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
If you've found a bug regarding security please mail contact@yieldstudio.fr instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.