Почему клонировать объект в разбивке по страницам yii2

Здесь в документация по нумерации страниц они используют $ countQuery = clone $ query; Зачем? Он работает без клонирования и выдает те же SQL-запросы, что и клон. Помогите мне найти разницу, пожалуйста.

3

Решение

Преимущество клон После создания нового объекта все свойства будут скопированы в новый объект вместо их сброса. Это очень полезно, когда вы используете конструктор запросов. В примере с официальным документом мы имеем:

$query = Article::find()->where(['status' => 1]);
$countQuery = clone $query;

Если вы получаете дамп из $query а также $countQuery ты можешь видеть, $countQuery это новый объект, так же, как $query и это также status=>1, В этих случаях мы используем клон, чтобы иметь два почти идентичных запроса с небольшими отличиями. Таким образом, вы можете иметь несколько поведения от Query Object , Это станет более полезным, если у вас есть сложные объекты построителя запросов, которые могут вам понадобиться, чтобы немного отличаться от существующего запроса. Например, вам нужно иметь union, Вы не хотите переписать свой Query объект, а ты? Поэтому лучшим способом было бы получить клон из существующего запроса, а затем изменить его поведение.

1

Другие решения

Если вы имели в виду, почему вы должны клонировать объект, а не использовать его повторно, ответ заключается в том, что вызов функции count для объекта может изменить его внутреннее состояние. Если вы снова используете тот же объект, это может привести к неожиданным результатам.

0