veelasky / laravel-hashid
HashId Implementation on Laravel Eloquent ORM
Installs: 141 796
Dependents: 3
Suggesters: 0
Security: 0
Stars: 43
Watchers: 1
Forks: 18
Open Issues: 0
pkg:composer/veelasky/laravel-hashid
Requires
- php: ^8.1
- hashids/hashids: ^5.0
- illuminate/config: ^10.0|^11.0
- illuminate/contracts: ^6.18|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- illuminate/validation: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0|^11.0
- roave/security-advisories: dev-latest
This package is auto-updated.
Last update: 2025-10-27 16:29:33 UTC
README
Automatic HashId generator for your Laravel Eloquent models.
About
Laravel HashId provides an elegant way to add hashed IDs to your Eloquent models. It generates unique, non-sequential hashes for your model IDs and provides convenient methods to work with them.
✨ Latest Features
Version 3.2.0 introduces powerful column selection capabilities along with full Laravel 11/12 and PHP 8.4 compatibility.
🔥 Column Selection API (New in v3.2.0)
// Get user by hash with specific columns (better performance!) $user = User::byHash($hash, ['name', 'email']); // Get user by hash with single column $user = User::byHash($hash, ['name']); // Column selection with exception handling $user = User::byHashOrFail($hash, ['name', 'email']);
Benefits:
- 🚀 Better Performance - Load only the columns you need
- 🔒 Type Safety - Automatic primary key inclusion when required
- 🔄 Backward Compatible - All existing code works unchanged
- 🎯 Smart Defaults - ['*']loads all columns, just like before
Compatibility
Modern Laravel Support (Recommended)
| Laravel HashId | PHP Version | Laravel 10 | Laravel 11 | Laravel 12 | 
|---|---|---|---|---|
| 3.2 🌟 | ≥ 8.1 | ✅ | ✅ | ✅ | 
| 4.x 🚀 | ≥ 8.1 | ✅ | ✅ | ✅ | 
- 🌟 Stable Release (3.2) - Recommended for production
- 🚀 Development Branch (4.x) - Latest improvements
Full Version Matrix
| Laravel HashId | PHP Version | Laravel 6 | Laravel 7 | Laravel 8 | Laravel 9 | Laravel 10 | Laravel 11 | Laravel 12 | 
|---|---|---|---|---|---|---|---|---|
| 1.x | ≥ 7.0 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 
| 2.x | ≥ 7.2 | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | 
| 3.0 | ≥ 7.4 | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | 
| 3.1 | ≥ 8.0 | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | 
| 3.2 🌟 | ≥ 8.1 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | 
| 4.x 🚀 | ≥ 8.1 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | 
📊 Version Recommendations:
- Laravel 6-9 → Use 3.0or3.1
- Laravel 10+ → Use 3.2(stable) or4.x(development)
- Latest features → Use 3.2+with column selection support
Installation
composer require veelasky/laravel-hashid
With Laravel's package auto-discovery, the package will be automatically registered.
Quick Start
Simply add the HashableId trait to any Eloquent model you want to use with HashId:
use Illuminate\Database\Eloquent\Model; use Veelasky\LaravelHashId\Eloquent\HashableId; class User extends Model { use HashableId; }
Usage Examples
Basic Usage
$user = User::find(1); // Find user by ID $user->hash; // Get HashId automatically // Find by HashId $user = User::byHash($hash); $user = User::byHashOrFail($hash); // Throws exception if not found // Convert between ID and HashId $hashedId = User::idToHash($id); $originalId = User::hashToId($hash); // Query scope User::query()->byHash($hash)->get();
Column Selection (New in v3.2)
// Load only specific columns for better performance $user = User::byHash($hash, ['name', 'email']); // Single column selection $user = User::byHash($hash, ['name']); // Column selection with exception handling $user = User::byHashOrFail($hash, ['name', 'email']);
Persisting HashId to Database
class User extends Model { use HashableId; protected $shouldHashPersist = true; // Persist hash to database protected $hashColumnName = 'hashid'; // Custom column name (optional) }
Route Model Binding
The trait automatically overwrites route methods to use HashId:
Route::get('/users/{user}', [UserController::class, 'show']); class UserController { public function show(User $user) { // $user resolves automatically by HashId // Example URL: /users/k1jTdv6l } }
Validation Rules
use App\Models\User; use Veelasky\LaravelHashId\Rules\ExistsByHash; $request->validate([ 'user_id' => ['required', new ExistsByHash(User::class)], ]);
Advanced Usage
Repository Pattern Access
// Using the HashId facade $hashedId = HashId::idToHash($id, User::class); $originalId = HashId::hashToId($hash, User::class); // Manual hash ID creation $hashId = HashId::make('custom-key', 'custom-salt');
Shared Hash Across Models
class User extends Model { protected $hashKey = 'shared-hash-key'; } class Customer extends User { } $customer = Customer::find(1); $user = User::find(1); // Both will have the same hash echo $customer->hash === $user->hash; // true
Configuration
You can configure HashId behavior using environment variables:
HASHID_SALT=your-custom-salt HASHID_LENGTH=10 HASHID_ALPHABET=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
Or publish the configuration file:
php artisan vendor:publish --tag=laravel-hashid-config
License
MIT License. Feel free to use this package in your projects!