whereHashedId() is used frequently without a precomputed index.whereHashedId() queries on unindexed columns could become a bottleneck.whereHashedId() be used in high-traffic queries? If so, indexing or caching strategies are needed./models/123) be redirected to hashed equivalents (e.g., /models/abc123)?ExistsWithHashedIdRule be used extensively, or are custom validation logic extensions needed?createModel, factories).Model::findOrFail($hashedId)).Phase 1: Proof of Concept (Low Risk)
TestModel).Phase 2: Incremental Rollout (Medium Risk)
HashesModelIdsTrait to models exposed in APIs/URLs.Route::get('models/{model:hashed_id}').hashed_id instead of id. Use Laravel’s API resources or DTOs for consistency.exists rules with ExistsWithHashedIdRule where applicable.Phase 3: Full Migration (High Risk)
-- Option 1: Computed column (PostgreSQL/MySQL 5.7+)
ALTER TABLE models ADD COLUMN hashed_id VARCHAR(40) GENERATED ALWAYS AS (SHA1(CONCAT(id, '{salt}'))) STORED;
CREATE INDEX idx_models_hashed_id ON models(hashed_id);
-- Option 2: Trigger (SQLite/MySQL <5.7)
CREATE TRIGGER update_hashed_id BEFORE INSERT ON models FOR EACH ROW
BEGIN SELECT SHA1(CONCAT(NEW.id, '{salt}')) INTO @hashed_id;
END;
Route::get('models/{id}', function ($id) {
return redirect()->route('models.hashed', ['model' => Model::find($id)->hashed_id]);
})->where('id', '[0-9]+');
Phase 4: Deprecation (Optional)
Spatie\Activitylog)..env or published config.hashed_id vs. id).whereHashedId() queries scale poorly. Mitigate with:
How can I help you explore Laravel packages today?