Did you know you can define custom route bindings in Laravel?
In this example, I need to resolve a portfolio by slug. But the slug is not unique, because multiple users can have a portfolio named 'Foo'
So I define how Laravel should resolve them from a route parameter
class RouteServiceProvider extends ServiceProvider{ public const HOME = '/dashboard'; public function boot() { Route::bind('portfolio', function (string $slug) { return Portfolio::query() ->whereBelongsto(request()->user()) ->whereSlug($slug) ->firstOrFail(); }); }}
Route::get('portfolios/{portfolio}', function (Portfolio $portfolio) { /* * The $portfolio will be the result of the query defined in the RouteServiceProvider */})
Tip given by @mmartin_joo