Я не могу вернуть выбранные поля из моей модели с помощью ActiveDataProvider для моей конечной точки REST API.
Вот мой код контроллера:
return new ActiveDataProvider([
'query' => ActivityPredecessor::find()->where(['activity_id'=>$activity_id])
]);
Мой ActivityPredecessor связан с активностью Таблица выглядит следующим образом:
public function getCurrentActivity()
{
return $this->hasOne(Activity::className(), ['activity_id' => 'activity_id']);
}
Вот мои функции дополнительных полей:
public function extraFields() {
return ['activity'];
}
Но когда я возвращаю ответ от своего контроллера как JSON, он не содержит связанных данных «активности» . Он просто содержит поля текущей модели (ActivityPredecessor). Например:
{
"predecessor_id": 1,
"activity_id": 98132,
"created_at": "2020-07-14 03:17:06.04294"
}
Когда я печатаю dataProvider, он содержит связанную модель activity
, но когда я возвращаю ее как JSON, она не включается в ответ.
Я знаю Я могу переопределить функцию полей, чтобы включить ее следующим образом:
public function fields()
{
$fields=parent::fields();
array_push($fields,'activity');
return $fields;
}
Но если я это сделаю, ответ всегда будет включать activity
модель, которая мне не нужна. Я хочу иметь возможность получать различные поля на основе полей и расширять параметры в URL-адресе следующим образом:
http://localhost: 88 / предшественники? Fields = предшественник_id (Получать только predcessor_id в ответ)
http://localhost: 88 / предшественники? Fields = predcessor_id & expand = activity (Получить только predcessor_id из текущей модели, но также включить связанную модель activity
в ответ)
Но во всех случаях он возвращает одни и те же данные независимо от того, указываю я поля или расширять параметры или нет. Короче говоря, расширение и поля вообще не работают.
Кто-нибудь, пожалуйста, скажите мне, что я делаю не так?