perQuery($this->getQuery(), $params)->orderBy('sort')->get(); } /** * @param Builder $query * @param array $params * @return Builder */ public function handleSearch(Builder $query, array $params): Builder { $whereInName = static function (Builder $query, array|string $code) { $query->whereIn('name', Arr::wrap($code)); }; return $query ->when(Arr::get($params, 'sortable'), static function (Builder $query, array $sortable) { $query->orderBy(key($sortable), current($sortable)); }) ->when(Arr::get($params, 'code'), $whereInName) ->when(Arr::get($params, 'name'), $whereInName) ->when(Arr::get($params, 'children'), static function (Builder $query) { $query->with('children'); })->when(Arr::get($params, 'status'), static function (Builder $query, AdminMenuStatusCode $status) { $query->where('status', $status); }) ->when(Arr::has($params, 'parent_id'), static function (Builder $query) use ($params) { $query->where('parent_id', Arr::get($params, 'parent_id')); }); } /** * @return Builder[]|\Hyperf\Database\Model\Collection */ public function allTree(): \Hyperf\Database\Model\Collection|array { return $this->model ->newQuery() ->where('parent_id', 0) ->with('children') ->get(); } }