[11.x] Allow callback to be passed to updateOrInsert()
to pass different $values
if the record already exists
#51566
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.
Earlier today I found myself wanting to pass a different array of values to
updateOrInsert()
depending on whether the record already existed or not. Effectively, I only wanted to update a specific column on the initial insertion of a record, not any future updates of said record.To do this, I defined an array with values I definitely want to update, then did a conditional check to see if the record exists to add more elements to the array, like so:
updateOrInsert()
already internally performs the check for existence, so the check was being executed twice.This PR allows a callback to be passed that will return an array, instead of just passing an array with conditional keys (see example below).
An array is still able to be passed through, and is still set as the default parameter, for backwards compatibility.
Of course, you could still do the conditional keys, but keep it contained within the callback for tidiness.