[12.x] Adds resolver for specific Model route binding fields #55646
+98
−1
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.
What?
This PR allows the developer to transform incoming route binding fields values, instead of overriding the Route Binding methods. The main problematic that it solves modifying the field value or query.
The developer can use
resolveField()
on the target model to register a callback that will be executed for the specific implicit binding field. The callback receives the value, field name, and query builder. The developer may return a new field value, or completely hijack the query for better control.In the following example, the
Car
model doesn't have anulid
column. Instead of creating that column in the database, we can resolve theulid
field and transform the query to find the record by its UUID:When the callback doesn't return an Eloquent Query or Base Query, it will use the returned value as part of the
where
key:Also, because the field resolver is a callable, the user can register invokable class instances as resolver if needed, especially if their logic is too much for a single function.
Finally, the resolver can be deleted by setting
null
.