explode(','); foreach ($sortValues as $sortValue) { $criteria[] = static::parseCriteria(new GlobalScope(), $sortValue); } } if (Arr::accessible($sortParam) && Arr::isAssoc($sortParam)) { foreach ($sortParam as $type => $sortList) { if ($sortList !== null && ! Arr::accessible($sortList)) { $scope = ScopeParser::parse($type); $sortValues = Str::of($sortList)->explode(','); foreach ($sortValues as $sortValue) { $criteria[] = static::parseCriteria($scope, $sortValue); } } } } } return $criteria; } /** * Parse criteria instance from query string. * * @param Scope $scope * @param string $sortValue * @return Criteria */ protected static function parseCriteria(Scope $scope, string $sortValue): Criteria { $field = Str::lower($sortValue); if ($field === RandomCriteria::PARAM_VALUE) { return new RandomCriteria($scope); } $direction = Direction::ASCENDING; if (Str::startsWith($field, '-')) { $direction = Direction::DESCENDING; $field = Str::replaceFirst('-', '', $field); } if (Str::contains($field, '.')) { return new RelationCriteria($scope, $field, $direction); } return new FieldCriteria($scope, $field, $direction); } }