Да, возможно создать выборку из контроллера в кастомном методе 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.