YiiFramework Зачем клонировать запрос?

Vano

Новичок
В гайде к пагинации - http://www.yiiframework.com/doc-2.0/yii-data-pagination.html - чтобы узнать количество записей подходящих условию клонируется запрос.
Код:
$query = Article::find()->where(['status' => 1]);
    $countQuery = clone $query;
    $pages = new Pagination(['totalCount' => $countQuery->count()]);
    $models = $query->offset($pages->offset)
        ->limit($pages->limit)
        ->all();
Зачем это нужно? Ведь я могу тем же запросом вытащить и count и после all()
Код:
$query = Article::find()->where(['status' => 1]);
    $pages = new Pagination(['totalCount' => $query ->count()]);
    $models = $query->offset($pages->offset)
        ->limit($pages->limit)
        ->all();
 

Vano

Новичок
))) я какраз вспоминал этот псто.
Вот, какраз то, я понимаю что такое обьект. И получается метод all() возвращает массив обьектов ActiveREcord и никак не задевает обьект который возвращает find() ActiveQuery( по крайней мере я так думаю ) Так вот, тут мне кажется или я не прав, или в гайде клонировали чисто бо "береженого Бог бережет". Как вместо if (!empty($var)) писать if (isset($var) && !empty($var))
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
а ты проверь, добавь какой нибудь order by к примеру
 

Vano

Новичок
Нашел ответ. Самое главное: методы count и all меняют внутреннее состояние обьекта, это я проверил - правда. Это может привести к неожиданным результатам. Но даже если и не приведет, то см. выше) иногда и лефтДжойн в коунте может оказаться ненужным(если по второй таблице кондишн не идет). В общем клонировать нужно!
 
Сверху