0
use yii\data\Pagination;
$query = Article::find()->where(['status' => 1]);
$countQuery = clone $query;
$pages = new Pagination(['totalCount' => $countQuery->count()]);
$models = $query->offset($pages->offset)
  ->limit($pages->limit)
  ->all();
return $this->render('index', [
  'models' => $models,
  'pages' => $pages,
]);

做分页的时候代码都要加$countQuery = clone $query;这句 ,具体作用是什么,我去掉也不影响.有什么特别作用吗??

3个回答

0

只知道clone是为了将“查询总数”和后续的“获取列表”查询来分开,以免会有影响,但是至于直接用$query->count()是否会对后面的$query->xxx产生影响,貌似仅仅是只查询count()的话是没有影响的,所以这里clone感觉没多大必要,不知道其他人怎么看?

0

这里的clone是复制对象,就是复制了一份$query对象,包含之前的属性和方法,这里使用clone是为了避免后面的操作影响到这个$query对象。比如你后面有2个查询都要用到$query对象,一个要加where条件,另一个不加条件,这时候clone的就有作用了

$countQuery = clone $query;
$countQuery->where(['xx'=>'xx']);
$countQuery2 = clone $query;

这时候去掉clone 直接使用$query,两个查询都会带有这个条件,这明显就不对了.
你提供的代码里后续没有要用到$query对象所以去掉直接使用也没影响。

0

个人感觉clone还是要带上

撰写答案