В Yii фильтрация выборки значений из таблицы в REST контроллере с использованием других полей больше чем только id, может быть реализована с помощью запроса к базе данных, который использовал бы условия WHERE.
Для начала, вам необходимо определить модель, соответствующую вашей таблице. В модели вы можете определить атрибуты, которые будут использоваться для фильтрации.
Например, если у вас есть таблица "users" с атрибутами "id", "name" и "age", и вы хотите фильтровать пользователей по их именам и возрасту, вам необходимо создать модель, соответствующую этой таблице, и определить атрибуты "name" и "age":
class User extends yiidbActiveRecord { // ... public function rules() { return [ [['name', 'age'], 'safe'], ]; } // ... }
Затем в вашем REST контроллере вы можете использовать фильтры в методе actionIndex()
для применения условий WHERE к запросу:
class UserController extends yiirestActiveController { public $modelClass = 'appmodelsUser'; public function actions() { $actions = parent::actions(); unset($actions['index']); return $actions; } public function actionIndex() { $queryParams = Yii::$app->request->getQueryParams(); $model = new $this->modelClass; foreach ($queryParams as $attribute => $value) { if ($model->hasAttribute($attribute)) { $model->setAttribute($attribute, $value); } } $dataProvider = new ActiveDataProvider([ 'query' => $model::find()->where($model->attributes), ]); return $dataProvider; } }
Теперь, вы можете отправить GET запрос на эндпоинт /users с параметрами фильтрации, например:
GET /users?name=John&age=25
Такой запрос вернет пользователей с именем "John" и возрастом 25.
Учтите, что фильтр будет работать только для атрибутов, объявленных в модели, а также они должны быть указаны в правилах валидации модели (метод rules()
). Для фильтрации по другим полям, вам необходимо будет добавить эти атрибуты в правила валидации модели.