PHPackages                             gorankrgovic/laravel-shortable - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. gorankrgovic/laravel-shortable

ActiveLibrary[Database &amp; ORM](/categories/database)

gorankrgovic/laravel-shortable
==============================

Laravel package for creating Youtube-like short IDs.

v1.0.1(7y ago)3232MITPHPPHP ^7.0

Since Dec 22Pushed 7y ago1 watchersCompare

[ Source](https://github.com/gorankrgovic/laravel-shortable)[ Packagist](https://packagist.org/packages/gorankrgovic/laravel-shortable)[ Docs](https://github.com/gorankrgovic/laravel-shortable)[ RSS](/packages/gorankrgovic-laravel-shortable/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (8)Versions (3)Used By (0)

Laravel Eloquent Shortable
==========================

[](#laravel-eloquent-shortable)

Easy creation of short random unique ID's like Youtube ones (i.e. watch?v=e3H73n7U) for your Eloquent models in Laravel/Lumen.

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require gorankrgovic/laravel-shortable
```

The package will automatically register its service provider.

Optionally, publish the configuration file if you want to change any defaults:

```
php artisan vendor:publish --provider="Gorankrgovic\LaravelShortable\ServiceProvider"
```

Updating your Eloquent Models
-----------------------------

[](#updating-your-eloquent-models)

Your models should use the Shortable trait, which has an abstract method shortable() that you need to define. This is where any model-specific configuration is set (see Configuration below for details):

```
use Gorankrgovic\LaravelShortable\Shortable;

class Video extends Model
{
    use Shortable;

    /**
     * Return the shortable configuration array for this model.
     *
     * @return array
     */
    public function shortable()
    {
        return [
            'short_url'
        ];
    }
}
```

If you want more than one field, you can just add more to array.

Of course, your model and database will need a column in which to store the short ID. You will need to add the column manually via your own migration.

That's it ... your model is now "shortable"!

Usage
-----

[](#usage)

Saving a model is easy:

```
$video = new Video([
    'whateve' => 'My Awesome Video',
]);

$video->save();
```

And so is retrieving the shortable:

```
$video->short_url;
```

Or whatever you have called it.

The ShortService Class
----------------------

[](#the-shortservice-class)

All the logic to generate slugs is handled by the `\Gorankrgovic\LaravelShortable\Services\ShortService` class.

Generally, you don't need to access this class directly, although there is one static method that can be used to generate a short without actually creating or saving an associated model.

```
use Gorankrgovic\LaravelShortable\Services\ShortService;

$short = ShortService::createShort(Post::class, 'column_name');
```

This would be useful for testing the package.

You can also pass an optional array of configuration values as the fourth argument.

Events
------

[](#events)

Package will fire two Eloquent model events: "shorting" and "shorted".

You can hook into either of these events just like any other Eloquent model event:

```
Post::registerModelEvent('shorting', function($post) {
    if ($post->someCondition()) {
        // the model won't be shorted
        return false;
    }
});

Post::registerModelEvent('shorted', function($post) {
    Log::info('Post shorted: ' . $post->getShort());
});
```

Additional trait
----------------

[](#additional-trait)

Adding the optional ShortableScopeHelpers trait to your model allows you to work with models and their id's. For example:

```
$post = Post::whereShort($shortString)->get();

$post = Post::findByShort($shortString);

$post = Post::findByShortOrFail($shortString);
```

Because models can have more than one short id, this requires a bit more configuration.

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~84 days

Total

2

Last Release

2613d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/dc897661efd3f9b1d0b6cee6fa6eb2f5535819e0c2e0a0adab66b4d6002133be?d=identicon)[gorankrgovic](/maintainers/gorankrgovic)

---

Top Contributors

[![diginf](https://avatars.githubusercontent.com/u/38245589?v=4)](https://github.com/diginf "diginf (3 commits)")

---

Tags

laraveleloquentyoutubeshortenShortable

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/gorankrgovic-laravel-shortable/health.svg)

```
[![Health](https://phpackages.com/badges/gorankrgovic-laravel-shortable/health.svg)](https://phpackages.com/packages/gorankrgovic-laravel-shortable)
```

###  Alternatives

[cviebrock/eloquent-sluggable

Easy creation of slugs for your Eloquent models in Laravel

4.0k13.6M253](/packages/cviebrock-eloquent-sluggable)[tucker-eric/eloquentfilter

An Eloquent way to filter Eloquent Models

1.8k4.8M26](/packages/tucker-eric-eloquentfilter)[cviebrock/eloquent-taggable

Easy ability to tag your Eloquent models in Laravel.

567694.8k3](/packages/cviebrock-eloquent-taggable)[watson/validating

Eloquent model validating trait.

9723.3M47](/packages/watson-validating)[cybercog/laravel-ban

Laravel Ban simplify blocking and banning Eloquent models.

1.1k651.8k11](/packages/cybercog-laravel-ban)[cybercog/laravel-love

Make Laravel Eloquent models reactable with any type of emotions in a minutes!

1.2k302.7k1](/packages/cybercog-laravel-love)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
