refactor(database): extract HasUniqueStringIds trait to reduce code duplication#7590
Merged
limingxinleo merged 4 commits intohyperf:3.2from Nov 3, 2025
Merged
Conversation
…uplication Extracted common methods from HasUuids and HasUlids traits into a new HasUniqueStringIds trait to improve code maintainability and reduce duplication. The new trait contains shared logic for: - uniqueIds() method to get columns receiving unique identifiers - getKeyType() method to determine the key type based on unique IDs - getIncrementing() method to determine if IDs are auto-incrementing This refactoring makes the codebase more DRY and easier to maintain.
…niqueId methods in HasUniqueStringIds trait
There was a problem hiding this comment.
Pull Request Overview
This PR refactors the HasUuids and HasUlids traits to extract common functionality into a new shared HasUniqueStringIds trait, reducing code duplication and improving maintainability.
- Extracts shared methods (
uniqueIds,getKeyType,getIncrementing) intoHasUniqueStringIdstrait - Adds route binding validation with
resolveRouteBindingQueryandhandleInvalidUniqueIdmethods - Both
HasUuidsandHasUlidsnow only implement their specific validation logic viaisValidUniqueId
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
src/database/src/Model/Concerns/HasUniqueStringIds.php |
New trait containing shared functionality for string-based unique IDs including validation, route binding, and key type management |
src/database/src/Model/Concerns/HasUuids.php |
Refactored to use HasUniqueStringIds trait and only implement UUID-specific validation |
src/database/src/Model/Concerns/HasUlids.php |
Refactored to use HasUniqueStringIds trait and only implement ULID-specific validation |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
limingxinleo
approved these changes
Nov 3, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR extracts common methods from
HasUuidsandHasUlidstraits into a newHasUniqueStringIdstrait to improve code maintainability and reduce duplication.Changes Made
Created
HasUniqueStringIdstrait with shared logic:uniqueIds()- Returns columns that should receive unique identifiersgetKeyType()- Determines the key type based on unique IDsgetIncrementing()- Determines if IDs are auto-incrementingnewUniqueId()- Abstract method to be implemented by using traitsModified
HasUuidstrait:HasUniqueStringIdstraitHasUniqueStringIds)newUniqueId()for UUID generationModified
HasUlidstrait:HasUniqueStringIdstraitHasUniqueStringIds)newUniqueId()for ULID generationBenefits
Test plan
HasUuidstraitHasUlidstraitgetKeyType()returns 'string' for unique ID columnsgetIncrementing()returns false for unique ID columns