【10.x】Individual wrapping in Collection::sortByMany
allows sorting with multiple attributes by just an array of attributes(without direction, defaulting to asceding sort), but the spec is missing in docs
#10581
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.
Calling sortBy with a flat array allows sorting asc by multiple attributes.
The method works but not documented, causing confusion by explicit directions or workarounds like chaining sortBy in reverse order, i.e.
$collection->sortBy('second-priority')->sortBy('first-priority')
, which does not happen in similirBuilder::orderBy
method.Caution
I haven't tested this on versions above 11 or below 9, so, not confident if it works for other versions
Example
Why it works?
In
Collection::sortByMany
, When passing each comparisons,Arr::wrap
is called, which wraps string to array$ascending
https://github.com/laravel/framework/blob/37455bbd9ece2ab48443b4ad2af85abf2140e326/src/Illuminate/Collections/Collection.php#L1458-L1460