yii2分页中使用 clone作用

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.5k
3 个回答

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

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

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

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

个人感觉clone还是要带上

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题