@@ -188,17 +188,37 @@ public function get(): Collection
188188 {
189189 return $ this ->query ()->get ();
190190 }
191+
192+ /**
193+ * Apply order to query by sort options.
194+ *
195+ * @param Builder $query Query builder
196+ * @param SortOptions|SortOptions[] $sortOptions How list of items should be sorted
197+ *
198+ * @return Builder
199+ */
200+ private function applyOrderBy (Builder $ query , $ sortOptions ): Builder
201+ {
202+ if ($ sortOptions instanceof SortOptions) {
203+ $ query ->orderBy ($ sortOptions ->orderBy , $ sortOptions ->sortOrder );
204+ } elseif (is_array ($ sortOptions )) {
205+ foreach ($ sortOptions as $ sortOption ) {
206+ $ query ->orderBy ($ sortOption ->orderBy , $ sortOption ->sortOrder );
207+ }
208+ }
209+ return $ query ;
210+ }
191211
192212 /** {@inheritdoc} */
193213 public function getPage (
194214 PagingInfo $ paging ,
195215 array $ fieldValues = [],
196- ? SortOptions $ sortOptions = null
216+ $ sortOptions = null
197217 ): LengthAwarePaginator {
198218 $ builder = $ this
199219 ->query ()
200220 ->when ($ sortOptions , function (Builder $ query ) use ($ sortOptions ) {
201- return $ query -> orderBy ( $ sortOptions -> orderBy , $ sortOptions-> sortOrder );
221+ return $ this -> applyOrderBy ( $ query , $ sortOptions );
202222 });
203223 $ builder ->addNestedWhereQuery ($ this ->getNestedWhereConditions ($ builder ->getQuery (), $ fieldValues ));
204224
@@ -209,12 +229,12 @@ public function getPage(
209229 public function getCursorPage (
210230 CursorRequest $ cursor ,
211231 array $ fieldValues = [],
212- ? SortOptions $ sortOptions = null
232+ $ sortOptions = null
213233 ): CursorResult {
214234 $ builder = $ this
215235 ->query ()
216236 ->when ($ sortOptions , function (Builder $ query ) use ($ sortOptions ) {
217- return $ query -> orderBy ( $ sortOptions -> orderBy , $ sortOptions-> sortOrder );
237+ return $ this -> applyOrderBy ( $ query , $ sortOptions );
218238 });
219239 $ builder ->addNestedWhereQuery ($ this ->getNestedWhereConditions ($ builder ->getQuery (), $ fieldValues ));
220240
@@ -337,7 +357,7 @@ private function performJoin($query, string $table, string $foreign, string $oth
337357 * @param array $with Which relations should be preloaded
338358 * @param array|null $withCounts Which related entities should be counted
339359 * @param array|null $where Conditions that retrieved entities should satisfy
340- * @param SortOptions|null $sortOptions How list of item should be sorted
360+ * @param SortOptions|SortOptions[]| null $sortOptions How list of item should be sorted
341361 *
342362 * @return Builder
343363 *
@@ -347,7 +367,7 @@ protected function getWithBuilder(
347367 array $ with ,
348368 ?array $ withCounts = null ,
349369 ?array $ where = null ,
350- ? SortOptions $ sortOptions = null
370+ $ sortOptions = null
351371 ): Builder {
352372 return $ this ->query ()
353373 ->when ($ with , function (Builder $ query ) use ($ with ) {
@@ -360,7 +380,7 @@ protected function getWithBuilder(
360380 return $ query ->where ($ where );
361381 })
362382 ->when ($ sortOptions , function (Builder $ query ) use ($ sortOptions ) {
363- return $ query -> orderBy ( $ sortOptions -> orderBy , $ sortOptions-> sortOrder );
383+ return $ this -> applyOrderBy ( $ query , $ sortOptions );
364384 });
365385 }
366386
@@ -390,15 +410,15 @@ public function getWith(
390410 array $ with ,
391411 ?array $ withCounts = null ,
392412 ?array $ where = null ,
393- ? SortOptions $ sortOptions = null
413+ $ sortOptions = null
394414 ): Collection {
395415 $ builder = $ this ->query ()
396416 ->with ($ with )
397417 ->when ($ withCounts , function (Builder $ query ) use ($ withCounts ) {
398418 return $ query ->withCount ($ withCounts );
399419 })
400420 ->when ($ sortOptions , function (Builder $ query ) use ($ sortOptions ) {
401- return $ query -> orderBy ( $ sortOptions -> orderBy , $ sortOptions-> sortOrder );
421+ return $ this -> applyOrderBy ( $ query , $ sortOptions );
402422 });
403423
404424 if ($ where ) {
0 commit comments