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

v1.1.2 2025-09-13 17:19 UTC

This package is auto-updated.

Last update: 2025-12-13 18:22:31 UTC


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