areia-lab / slug-uid
A Laravel package to generate unique slugs, UIDs, and sequence numbers.
Installs: 9
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/areia-lab/slug-uid
Requires
- php: >=8.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
README
SlugUid is a Laravel package to automatically generate slugs, unique identifiers (UIDs), and sequence numbers for your models. It supports configuration, facades, traits, and artisan commands.
📖 Documentation: Complete Guide to Slug-UID
Requirements
- PHP >= 8.0
- Laravel >= 9.0
- Composer
Installation
composer require areia-lab/slug-uid
Publish the configuration:
php artisan vendor:publish --provider="AreiaLab\SlugUid\SlugUidServiceProvider" --tag=sluguid-config
Configuration
Slug Settings
'slug' => [ 'separator' => '-', 'max_length' => 150, 'source_columns' => ['title','name'], 'regen_on_update' => true, ]
UID Settings
'uid' => [ 'prefix' => 'UID', 'length' => 16, 'driver' => 'uuid4', ]
Sequence Settings
'sequence' => [ 'prefix' => 'ORD', 'padding' => 5, 'column' => 'post_sequence', 'scoped' => true, 'separator' => '-', ]
Usage
Basic usage with the Facade:
// Generate slug SlugUid::slug('Hello World'); // Unique slug for model SlugUid::uniqueSlug(Post::class, 'Hello World'); // Generate UID SlugUid::uid(); SlugUid::uniqueUid(Post::class, 'USR'); // Sequence SlugUid::sequence(Post::class, 'ORD', 4);
Facade Methods
SlugUid::slug('Hello World'); SlugUid::uniqueSlug($post); SlugUid::uid('USR'); SlugUid::uniqueUid(Post::class, 'USR'); SlugUid::sequence(Post::class, 'INV');
Traits
Instead of a single trait, you can use dedicated traits for slug, uid, and sequence:
<?php namespace App\Models; use AreiaLab\SlugUid\Traits\HasSequence; use AreiaLab\SlugUid\Traits\HasSlug; use AreiaLab\SlugUid\Traits\HasUid; use Illuminate\Database\Eloquent\Model; class Post extends Model { use HasSlug, HasUid, HasSequence; public $slug_column = 'slug'; public $slug_source = 'title'; public $uid_column = 'uid'; public $uid_prefix = 'POST'; public $sequence_column = 'post_sequence'; public $sequence_prefix = 'PST'; public $sequence_padding = 4; public $sequence_scoped = true; public $sequence_separator = '-'; protected $fillable = ['title', 'slug', 'uid', 'post_sequence', 'description']; }
Features
- Customizable slug sources
- Automatic regeneration on update
- Hash-based UID generators
- Scoped sequence numbers per model type
- Artisan regen command
- Facade + Trait support
- Publishable configuration
Examples
Generate a basic slug
return SlugUid::slug('Hello World'); // Output: hello-world
Generate a unique slug for a model
return SlugUid::uniqueSlug(Post::class, 'Hello World'); // Output: hello-world // Output if slug exists: hello-world-1
Generate a UID with prefix
return SlugUid::uid('prefix'); // Output: prefix-65e1d5ff5201a7
Generate a unique UID for a model
return SlugUid::uniqueUid(Post::class, 'prefix'); // Output: prefix-xxxxxxxxxxxxxx (unique)
Generate a sequence number for a model
return SlugUid::sequence(Post::class, 'PST'); // Output: PST-0001 return SlugUid::sequence(Post::class, 'INV', 4); // Output: INV-0001
Generate slug, UID, and sequence from model creation
return Post::create([ 'title' => 'hello world', 'slug' => SlugUid::uniqueSlug(Post::class, 'hello world'), 'uid' => SlugUid::uniqueUid(Post::class, 'post'), 'post_sequence' => SlugUid::sequence(Post::class), 'description' => 'This is a test post.' ]);
Create a model using only model configuration
return Post::create([ 'title' => 'hello world', 'description' => 'This is a test post.' ]);
Update model details
$post = Post::first(); $post->update([ 'title' => 'My First Post Updated', 'description' => 'This is a test post desc.' ]); return $post;
Artisan Commands
php artisan sluguid:regen App\Models\Post
🔹 Example
Suppose your posts table looks like this:
| id | title | slug | uid |
|---|---|---|---|
| 1 | Hello World | NULL | NULL |
| 2 | Laravel Command | old-slug | abc123 |
After running:
php artisan sluguid:regen "App\Models\Post"
It will regenerate values, maybe like this:
| id | title | slug | uid |
|---|---|---|---|
| 1 | Hello World | hello-world | 7f93a2... |
| 2 | Laravel Command | laravel-command | c8d8ff... |
License
MIT License © Areia Lab 2025