touhidurabir / laravel-multi-key-route-binding
A simple laravel package to handle multiple key based model route binding
Package info
github.com/touhidurabir/laravel-multi-key-route-binding
pkg:composer/touhidurabir/laravel-multi-key-route-binding
Requires
None
Requires (Dev)
- illuminate/support: ^8.54||^9.0||^10.0||^11.0||^12.0||^13.0
- laravel/pint: ^1.0
- orchestra/testbench: ^6.20||^7.0||^8.0||^9.0||^10.0||^11.0
- phpunit/phpunit: ^9.5||^10.0||^11.0||^12.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-29 03:58:13 UTC
README
A simple package to handle the multiple key/column based route model binding for laravel package
Installation
Require the package using composer:
composer require touhidurabir/laravel-multi-key-route-binding
Usage
Use the trait HasMultipleRouteBindingKeys in model where uuid needed to attach
use Touhidurabir\MultiKyeRouteBinding\HasMultipleRouteBindingKeys; use Illuminate\Database\Eloquent\Model; class User extends Model { use HasMultipleRouteBindingKeys; }
And then add the protected property $routeBindingKeys which will contails the list of other route binding keys.
/** * The attributes that will be used for multiple key binding on route models * * @var array */ protected $routeBindingKeys = [ 'email', 'username' ];
By default column id is considered as the primary key for route model binding . But it is always possible to override/customize the primary key for route binding as per laravel doc
/** * Get the route key for the model. * * @return string */ public function getRouteKeyName() { return 'slug'; }
The extra keys are used for implicit route model binding, including routes using ->withTrashed() and scoped child bindings (for example /users/{user}/posts/{post} with ->scopeBindings(), where the lookup stays scoped to the parent). When a route names an explicit binding field, such as {user:email}, only that field is used.
By default the trait returns id from getRouteKeyName(), even when the model has a different primary key. To use the model's own route key name instead (its primary key, for example uuid or code), opt in with the $useModelRouteKeyName property:
/** * Use the model's own route key name (its primary key) instead of 'id' * * @var bool */ protected $useModelRouteKeyName = true;
The MultiKyeRouteBinding facade resolves a model the same way route model binding does, which is handy outside of routes:
use Touhidurabir\MultiKyeRouteBinding\Facades\MultiKyeRouteBinding; MultiKyeRouteBinding::resolve(User::class, 'someone@example.com'); // by id, email or username MultiKyeRouteBinding::resolve(User::class, 'someone@example.com', 'email'); // only by email
The package also provide a bit of safe guard by checking if the model table has the given binding key column .
If the binding key column not found for model table schema, it will skip that binding key.
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.