Laravel Sqids (pronounced "squids") allows you to easily generate Stripe/YouTube looking IDs for your Laravel models. These IDs are short and are guaranteed to be Collision free.
For more information on Sqids, we recommend checking out the official Sqids (formerly Hashids) website: https://sqids.org.
To get started, install Laravel Sqids via the Composer package manager:
composer require red-explosion/laravel-sqidsNext, you should publish the Sqids configuration file using the vendor:publish artisan command. The sqids
configuration file will be placed in your applications config directory:
php artisan vendor:publish --provider="RedExplosion\Sqids\SqidsServiceProvider"To use Laravel Sqids, simply add the RedExplosion\Sqids\Concerns\HasSqids trait to your model:
use RedExplosion\Sqids\Concerns\HasSqids;
class User extends Authenticatable
{
use HasSqids;
}You will now be able to access the Sqid for the model, by calling the sqid attribute:
$user = User::first();
$sqid = $user->sqid; // use_A3EyoEb2TOThe result of $sqid will be encoded value of the models primary key along with the model prefix.
Tip
Only integers can be encoded, and therefore we recommend using this package in conjunction with auto incrementing IDs.
If you would like to set a custom prefix for the model, you can override it by setting a $sqidPrefix property value
on your model like so:
use RedExplosion\Sqids\Concerns\HasSqids;
class User extends Authenticatable
{
use HasSqids;
protected string $sqidPrefix = 'user';
}
$user = User::first();
$sqid = $user->sqid; // user_A3EyoEb2TOLaravel Sqids provides a number of Eloquent builder mixins to make working with Sqids seamless.
To find a model by a given Sqid, you can use the findBySqid method:
$user = User::findBySqid('use_A3EyoEb2TO');If the model doesn't exist, null will be returned. However, if you would like to throw an exception, you can use
the findBySqidOrFail method instead which will throw a ModelNotFoundException when a model can't be found:
$user = User::findBySqidOrFail('use_invalid');To add a where clause to your query, you can use the whereSqid method:
$users = User::query()
->whereSqid('use_A3EyoEb2TO')
->get();This will retrieve all users where the Sqid/primary key matches the given value.
To get all models where the Sqid is in a given array, you can use the whereSqidIn method:
$users = User::query()
->whereSqidIn('id', ['use_A3EyoEb2TO'])
->get();This will return all users where the id is in the array of decoded Sqids.
To get all models where the Sqid is not in a given array, you can use the whereSqidNotIn method:
$users = User::query()
->whereSqidNotIn('id', ['use_A3EyoEb2TO'])
->get();This will return all users where the id is not in the array of decoded Sqids.
Laravel Sqids supports route model binding out of the box. Simply create a route as you normally would and we'll take care of the rest:
// GET /users/use_A3EyoEb2TO
Route::get('users/{user}', function (User $user) {
return "Hello $user->name";
});One of the most powerful features of Laravel Sqids is being able to resolve a model instance from a given Sqid. This could be incredibly powerful when searching models across your application.
use RedExplosion\Sqids\Model;
$model = Model::find('use_A3EyoEb2TO');When we run the following, $user will be an instance of the User model for the given Sqid. If no model could be
found, then null will be returned.
if you would like to throw an exception instead, you can use the findOrFail method which will throw an instance of
the ModelNotFoundException:
use RedExplosion\Sqids\Model;
$model = Model::findOrFail('use_A3EyoEb2TO');Important
In order to use this feature, you must use prefixes for your Sqids.
composer testPlease see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
If you discover a security vulnerability, please send an e-mail to Ben Sherred via ben@redexplosion.co.uk. All security vulnerabilities will be promptly addressed.
Laravel Sqids is open-sourced software licensed under the MIT license.