@search74

Ленивая загрузка данных из базы?

Пытаюсь сделать так называемую "ленивую" загрузку данных, чтобы сократить кол-во запросов до одного.

protected $_allTimes;
    /**
     * Получить все временные отрезки
     * @return Time[]
     * @throws NotFoundHttpException
     */
    public function getAllTimes() {
        if(!isset($this->_allTimes)){
            echo " я запрос time выполняюсь 1 раз! ";
            $this->_allTimes = Time::find()
                    ->where($this->enabledScope)
                    ->orderBy('from')
                    ->all();
            if($this->_allTimes===null){
                throw new NotFoundHttpException('Ошибка. Не задан ни один временной промежуток!');
            }
        }
        return $this->_allTimes;
    }

    public function getEnabledScope(){
        return ['removed'=>0, 'enabled'=>1]
    }

Так вот, в yii1 выполняется 1 запрос, а в yii2 много. С чем это связано?
  • Вопрос задан
  • 2803 просмотра
Пригласить эксперта
Ответы на вопрос 2
@rommcr
А как вызывается метод getAllTimes? IMHO тут проблемы с контекстом вызова. По идее, это должен быть синглтон. Ты случаем не создаешь каждый раз новый объект?
Ответ написан
IvanCher
@IvanCher
Мысли шире
Случаем код у тебя не такого плана:
foreach($models as $model) {
  $model-> getAllTimes();
}

Если подобный, то действительно он будет для каждого экземпляра модели делать запрос, а при статичной переменной $_allTimes - только 1 запрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы