Добрый день!
Подскажите как сделать чтото вроде такого - http://localhost/API/v1/profiles?filter={cityId:'5'}
Чтобы в ответе были все профили у которых указан конкретный город с cityId=5
Фильтрация коллекции по значению поля
Re: Фильтрация коллекции по значению поля
Так же как и обычный index с GridView. Используйте searchModel. Можно ещё прописать метод:
Код: Выделить всё
actionIndex($filter = null)
{
$query->andWhere(['cityId' => $filter]);
//...
}
Re: Фильтрация коллекции по значению поля
спасибо, сделал так:
теперь понимает запросы вида http://localhost/rest/profiles?fields=i ... ":1,"id":4}
Вообще ожидал что подобная возможность должна быть реализована на уровне фреймворка.
Код: Выделить всё
public function actionIndex($filter = null)
{
$modelClass = $this->modelClass;
$filter = json_decode($filter,true);
if ($filter){
return new ActiveDataProvider([
'query' => $modelClass::find()->andWhere($filter),
]);
} else {
return new ActiveDataProvider([
'query' => $modelClass::find(),
]);
}
}
Вообще ожидал что подобная возможность должна быть реализована на уровне фреймворка.
Re: Фильтрация коллекции по значению поля
json создан был для js. И передаётся он обычно на серверный язык через POST... Поэтому Yii ничего не обязан реализовывать такого с коробки. Эта уже ваша хотелка странная.
Re: Фильтрация коллекции по значению поля
Я про то что любая реализация фильтрации для REST была бы не лишней, не обязательно json.
Например : http://localhost/API/cities?countryId=11 (фильтр городов по стране)
Например : http://localhost/API/cities?countryId=11 (фильтр городов по стране)
Re: Фильтрация коллекции по значению поля
Реализация есть. Используйте IndexAction c prepareDataProvider в вашем контроллере:
Код: Выделить всё
public function actions()
{
return [
'filter' => [
'class' => 'yii\rest\IndexAction',
'modelClass' => $this->modelClass,
'checkAccess' => [$this, 'checkAccess'],
'prepareDataProvider' => function($action) {
$modelClass = $action->modelClass;
return new ActiveDataProvider([
'query' => $modelClass::find()->where('country_id=:countryId', [':countryId' => $_GET['countryId']]),
]);
},
// ...
],