2017 © Pedro Peláez
 

library laravel-hashid

HashId Implementation on Laravel Eloquent ORM

image

veelasky/laravel-hashid

HashId Implementation on Laravel Eloquent ORM

  • Tuesday, January 23, 2018
  • by veelasky
  • Repository
  • 1 Watchers
  • 1 Stars
  • 96 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 60 % Grown

The README.md

Laravel HashId

Test Codacy Badge codecov Latest Stable Version StyleCI Total Downloads Dependents License, (*1)

Automatic HashId generator for your eloquent model., (*2)

Version Compatibilities

Laravel HashId PHP Version Laravel 5.* Laravel 6.* Laravel 7.* Laravel 8.* Laravel 9.* Laravel 10.*
1.x >=7.0 :white_check_mark: :white_check_mark: :x: :x: :x: :x:
2.x >=7.2 - <= 8.0 :x: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :x:
3.0 >=7.4 \ \ >= 8.0 :x: :white_check_mark: :white_check_mark: :white_check_mark: | :white_check_mark: | :x:
3.1 >= 8.0 :x: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
4.x >= 8.1 :x: :x: :x: :x: :x: :white_check_mark:

Install

composer require veelasky/laravel-hashid

With laravel package auto discovery, this will automatically add this package to your laravel application., (*3)

TLDR

Simply add HashableId trait on any of your eloquent model you are intending to use with HashId., (*4)

Example:, (*5)

use Illuminate\Database\Eloquent\Model;
use Veelasky\LaravelHashId\Eloquent\HashableId;

class User extends Model {
    use HashableId;
    ...
}

Usage

With Eloquent Model


$user = User::find(1); // instance of user. $user->hash; // generate HashId. // Database operation // get user by hashed id. $user = User::byHash($hash); // get user by hashed id, and throw ModelNotFoundException if not present. $user = User::byHashOrFail($hash); // get hashed id from the primary key. User::idToHash($id); // get ID from hashed string. User::hashToId($hash); // query scope with `byHash` method. User::query()->byHash($hash);

By default, all hash calculation will be calculated at runtime, but sometime you want to persist the hashed id to the database., (*6)

NOTE: when using persisting model, all database query will be check againts the table itself, except: $model->hash will always be calculated at runtime., (*7)

class User extends Model {
    use HashableId;

    // add this property to your model if you want to persist to the database.
    protected $shouldHashPersist = true;

    // by default, the persisted value will be stored in `hashid` column
    // override column name to your desired name.
    protected $hashColumnName = 'hashid';
    ...
}

Salt

The salt is generated automatically based on your app key and hash_alphabet. If you need to use the same salt between different projects, you can set the HASHID_SALT environment variable., (*8)

Route binding

When HashableId trait is used, base getRouteKey() and resolveRouteBinding() are overwritten to use the HashId as route key., (*9)

use App\Models\User;

class UserController extends Controller
{
    /**
     * Route /users/{user}
     * Ex: GET /users/k1jTdv6l
     */
    public function show(User $user)
    {
        ...
    }
}

In-Depth Coverage

This package use repository pattern to store all instantiated implementation of HashId\HashId class, this to achieve different hash result on every eloquent models defined with HashableId trait., (*10)

// using facade.
HashId::hashToId($hash, User::class)      // same as User::hashToId($hash);
HashId::idToHash($id, User::class)        // same as User::idToHash($hash);

// HashId facade class is an implementation of \Veelasky\Laravel\HashId\Repository

However you can opt-out to not using any eloquent model or implementing your own logic to the repository., (*11)

HashId::make($key, $salt);              // will return \HashId\HashId class.

// once you instantiated the object, you can retrieve it on your next operation
HashId::get($key);

If you're using single table inheritance model, where you want to has the same calculated hash across all inherited models, use $hashKey property, this will result the calculation remain the same across all inherited model., (*12)

class User extends Model {
    protected $hashKey = 'somethingUnique';
}

class Customer extends User {

}

$customer = Customer::find(1);
$user = User::find(1);

$user->hash; // will be equal to $customer->hash

You can also specify the length and characters of the hashed Id with HASHID_LENGTH and HASHID_ALPHABET environment variable respectively, or you can publish the configuration file using this command:, (*13)

php artisan vendor:publish --tag=laravel-hashid-config

Extra: Validation Rules

You can also use this as validation rules, simply add this rule to your validator., (*14)

use App\Models\User;
use Veelasky\LaravelHashId\Rules\ExistsByHash;

...
Validator::make([
    'id' => $hashedId
], [
    'id' => ['required', new ExistsByHash(User::class)],
]);
...

License

MIT License, (*15)

The Versions

23/01 2018

dev-master

9999999-dev

HashId Implementation on Laravel Eloquent ORM

  Sources   Download

MIT

The Requires

 

laravel lumen eloquent hashids hashid

22/01 2018

v1.0.0

1.0.0.0

HashId Implementation on Laravel Eloquent ORM

  Sources   Download

MIT

The Requires

 

laravel lumen eloquent hashids hashid