11
May 
                            Laravel Hashids is a small package to generate YouTube-like IDs from numbers. It converts numbers like 347 into strings like yr8.
You can install this package via composer:
composer require bvtterfly/laravel-hashids
You can publish the config file with:
php artisan vendor:publish --tag="hashids-config"
Your Eloquent models should have the Bvtterfly\LaravelHashids\HasHashId trait that contains an abstract getHashIdOptions method that you must implement yourself, and it should return the Bvtterfly\LaravelHashids\HashIdOptions class.
Your models’ migrations should have a field to save the generated hashid to.
Here’s an example of what a model would look like:
namespace App\Models;
use Bvtterfly\LaravelHashids\HasHashId;
use Bvtterfly\LaravelHashids\HashIdOptions;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
    use HasHashId;
    public function getHashIdOptions(): HashIdOptions
    {
        return HashIdOptions::create()->saveHashIdTo('hashid');
    }
}
By default, the Package will generate hashids from the models’ id.
And Its migration:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('hashid')->nullable(); // Field name same as your `saveHashIdTo`
            //...
            $table->timestamps();
        });
    }
}
The hashid column is generated from the id field, But id is an auto-increment column and doesn’t have value before saving in the DB. So, The hashid column must be nullable. And The Package will generate hashid and update the model after being saved in the database.
If you want to generate hashids from hex numbers like Mongo’s ObjectIds, you can change the type to the hex:
public function getHashIdOptions(): HashIdOptions
{
    return HashIdOptions::create()
        ->saveHashIdTo('hashid')
        ->setType('hex') // default = int
    ;
}
public function getHashIdOptions(): HashIdOptions
{
    return HashIdOptions::create()
        ->saveHashIdTo('hashid')
        ->generateHashIdFrom('custom_key')
    ;
}
By default, This package will generate hashids and update the model from the auto-incremented id column after being saved in the database. Still, if your field has value, you can change it to generate hashids while saving:
public function getHashIdOptions(): HashIdOptions
{
    return HashIdOptions::create()
        ->saveHashIdTo('hashid')
        ->setAutoGeneratedField(false)
    ;
}
To use the hashids in routes, you may specify the hashid column in the route parameter definition:
use App\Models\Post;
 
Route::get('/posts/{post:hashid}', function (Post $post) {
    return $post;
});
or If you would like model binding to always use the hashid column other than id when retrieving a given model class, you may override the getRouteKeyName method on the Eloquent model:
/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'hashid';
}
This package has a lot more, If you want to learn more about it you can visit its complete documentation and source code on Github
Published at : 11-05-2022
I am a highly results-driven professional with 12+ years of collective experience in the grounds of web application development especially in laravel, native android application development in java, and desktop application development in the dot net framework. Now managing a team of expert developers at Codebrisk.
 
    Launch project