yii2, оптимизация запросов в БД, связанные модели

Я создал данный запрос для получения данных с помощью "связывания моделей"

мой контроллер

\Yii::$app->view->registerMetaTag([
            'name' => 'description',
            'content' => "Freedom Home. " . self::META
        ]);

        $model = new Search();
        $dataProvider = $model->historis();

        \Yii::$app->getView()->registerJsFile(Yii::$app->request->baseUrl . '/js/history.js', ['position' => \yii\web\View::POS_END, 'depends' => [\yii\web\JqueryAsset::className()]]);
        $this->getView()->registerCssFile("@web/css/index.css", ['depends' => ['frontend\assets\AppAsset']]);
        $this->getView()->registerCssFile("@web/css/post.css", ['depends' => ['frontend\assets\AppAsset']]);

        return $this->render('index', array(
            'dataProvider' => $dataProvider
        ));
public function historis()
    {
        $query = History::find()
            ->select(['history.id', 'history.title', 'history.user_id', 'history.description', 'history.datetime'])
            ->joinWith('user')
            ->joinWith('historyHashtags');

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 10
            ],
            'sort' => [
                'defaultOrder' => [
                    'id' => SORT_DESC
                ]
            ],
        ]);

        return $dataProvider;
    }

метод getUser()

/**
     * Gets query for [[User]].
     *
     * @return \yii\db\ActiveQuery
     */
    public function getUser()
    {
        return $this->hasOne(User::className(), ['id' => 'user_id'])->select(['id', 'username']);
    }

historyHashtags

    public function getHistoryHashtags()
    {
        return $this->hasMany(HistoryHashtags::className(), ['history_id' => 'id'])->select(['hashtag_id', 'history_id'])->joinWith('hashtag');
    }

метод getHashtag

    public function getHashtag()
    {
        return $this->hasOne(Hashtags::className(), ['id' => 'hashtag_id'])->select(['id', 'name']);
    }

В итоге я получаю целых 14 запросов в БД

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

Вопрос как можно оптимизировать данный код?

  1. Убрать запросы типу SHOW FULL COLUMNS FROM и SELECT * FROM information_schema
  2. Оптимизировать мой код чтобы он сделал меньше запросов(Если это возможно)

Ответы (0 шт):