У нас есть active-record модель с большим количеством релейшенов.
Код: Выделить всё
class Product extends ActiveRecord
{
public function fields()
{
return [
'id',
'prices',
'producer'
];
}
public function getProducer()
{
return $this->hasOne(Producer::class, ['product_id' => 'id']);
}
public function getPrices() {
return $this->onePrice + $this->twoPrice;
}
}
Код: Выделить всё
Yii::$app->response->format = Response::FORMAT_JSON;
Записей в БД очень много и запрос очень тормозит. Хотя сам запрос к БД выполняется быстро.
Полагаю, что много времени тратится на создание моделей.
Попробовали использовать Product::find()->asArray(), всё действительно заработало быстро, но выводятся все поля из БД без учёта
полей, указанных в методе fields, что нам очень нужно.
Также при этом не вызываются методы, типа getPrices, которые выполняют предобработку данных перед отправкой на фронт.
Есть ли какое-либо решение этой проблемы? Чтобы и данные быстро отдавались и можно было пользоваться и полями fields и
методами типа getPrices?
Т.е. пользоваться объектами, но при этом чтобы запрос был быстрым?