Какая строка выполняется дольше всех?
        $pages = Page::query()->whereRelation('pageParent', 'fk_parent_page', $id);

        // Проверяем, есть ли условия для получения страниц с определенными шаблонами
        if (key_exists('templates', $conditions) && is_array($conditions['templates']) && (!key_exists(0, $conditions['templates']) || $conditions['templates'][0] !== '*')) {
            $pages = $pages->with(['template', 'template.fieldGroup.fields'])
                ->whereHas('template', function ($query) use ($conditions) {
                    $query->whereIn('directory', array_is_list($conditions['templates']) ? $conditions['templates'] : array_keys($conditions['templates']));
                });
        } else {
            // Если нет условий, то просто получаем шаблон и поля
            $pages = $pages->with(['template', 'template.fieldGroup.fields']);
        }

        if (key_exists('filters', $conditions) && is_array($conditions['filters'])) {
            foreach ($conditions['filters'] as $fieldName => $filters) {
                // FIXME: запрос на то, чтобы получить тип поля, подумать как обойтись без него
                $field = Field::query()->where('name', $fieldName)->select(['type'])->first();
                $dataField = DataField::getDataField($fieldName, $field->type);

                // Валидация опций фильтра
                $validatorOptions = $dataField::validFilterOptions("filters.$fieldName", ['filters' => $conditions['filters']]);
                if ($validatorOptions->fails()) {
                    throw new ValidationException($validatorOptions);
                }

                $safeFilters = $validatorOptions->safe()->toArray();
                if (count($safeFilters) > 0) {
                    $pages = $pages->whereExists(function ($query) use ($safeFilters, $dataField, $fieldName) {
                        $query->fromSub(
                            $dataField->filterQuery($safeFilters['filters'][$fieldName])->getQuery(),
                            "filter_$fieldName"
                        );
                    });
                }
            }
        }

        $pages = $pages
            ->orderByRaw('(SELECT sort_order FROM cr_page_tree WHERE cr_page.id = cr_page_tree.fk_child_page LIMIT 1) ASC')
            ->paginate($conditions['pageSize'] ?? 10);
        $pages->appends(['id' => $id]);

        $pages->getCollection()->transform(function (Page $page) use ($conditions) {
            $templateName = $page->template->directory;
            /*
             * FIXME: без повторного получения данных будут присваиваться dataField полей первой страницы на последующие
             * Баг лары при переборе коллекции
             */
            $page->refresh();

            // Проверяем, есть ли в шаблоне список разрешенных полей
            if (isset($conditions['templates'][$templateName]['fields'])) {
                $allowedFields = $conditions['templates'][$templateName]['fields'];

                // Проверяем, есть ли у страницы загруженные поля
                if ($page->template->fieldGroup && $page->template->fieldGroup->fields) {
                    $page->template->fieldGroup->fields = $page->template->fieldGroup->fields->whereIn('name', $allowedFields)->values();
                } else {
                    $page->template->fieldGroup->fields = collect();
                }
            }

            // Получение данных полей
            foreach ($page->template->fieldGroup->fields as $field) {
                $fieldData = DataField::getDataField($field->name, $field->type);
                $field->dataField = $fieldData->getData($field, $page);
            }

            return $page;
        });

        return $pages;