Можно ли сделать select из контроллера в кастомном методе, который наследует от ActiveController с учетом fields?

Да, возможно создать выборку из контроллера в кастомном методе ActiveController с использованием свойства fields.

Yii предоставляет мощный и гибкий механизм выборки данных из базы данных с использованием Active Record (AR). AR представляет собой шаблон проектирования, который обеспечивает объектно-ориентированный интерфейс для взаимодействия с базой данных.

В Yii контроллеры, которые наследуются от класса ActiveController, предоставляют реализацию стандартных операций CRUD (Создание, Чтение, Обновление, Удаление) для моделей AR. Однако в некоторых случаях может потребоваться определить кастомные методы, которые предоставляют специфическую логику для выборки данных.

Чтобы создать выборку из контроллера с использованием fields, необходимо переопределить один из стандартных методов, таких как actionIndex(), который отвечает за операцию чтения всех записей. Например, можно создать метод actionCustomSelect(), который будет выполнять кастомную выборку и учитывать fields.

Вот пример, как это можно сделать:

class CustomController extends ActiveController {
    
    public function actions() {
        $actions = parent::actions();
        
        // Отключаем стандартную реализацию операции чтения всех записей
        unset($actions['index']);
        
        return $actions;
    }
    
    public function actionCustomSelect() {
        $searchModel = new CustomModelSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $dataProvider->setSort(false);
        
        // Учитываем fields
        if (isset($searchModel->fields) && is_array($searchModel->fields)) {
            $dataProvider->query->select($searchModel->fields);
        }
        
        return $dataProvider;
    }
}

В данном примере, мы создали кастомный метод actionCustomSelect(), который выполняет выборку данных с использованием модели поиска и устанавливает сортировку в поле fields, указанное в модели поиска.

Затем мы переопределили стандартный метод actions(), чтобы отключить стандартную реализацию операции чтения всех записей (index).

Теперь, при обращении к api вашего приложения, например, http://example.com/custom/custom-select, будет выполняться кастомная выборка данных с использованием метода actionCustomSelect().

Таким образом, мы смогли создать выборку из контроллера в кастомном методе, который наследует от ActiveController с учетом fields.