feat(preloader): add preloadOnce to preload a relationship only once #1078
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.
π Linked issue
Similar to PR #1052 by @RomainLanz
β Type of change
π Description
Added a preloadOnce method to the query building using the same logic as the loadOnce
In our use case we allow the client to preload field using a query parameter

$populate: string[]While doing so we sometimes also use preload in our services

If the client request
findwith the following payload{ "$populate": ["tenant.settings"], "id": 1 }Without
.preloadOncequery.preload("tenant", (subquery) => { subquery.preload('settings') })query.preload("tenant")and override the callbackfindwill return the data with thetenantpopulated but without thetenant > settingsWith
.preloadOncequery.preload("tenant", (subquery) => { subquery.preload('settings') })query.preloadOnce("tenant")and nothing will happen as tenant is already queued for preloadingfindwill return the data with thetenantpopulated and alsotenant > settingspopulatedπ Checklist