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 回答
MYYA
TA贡献1868条经验 获得超4个赞
只知道clone是为了将“查询总数”和后续的“获取列表”查询来分开,以免会有影响,但是至于直接用$query->count()是否会对后面的$query->xxx产生影响,貌似仅仅是只查询count()的话是没有影响的,所以这里clone感觉没多大必要,不知道其他人怎么看?
慕容3067478
TA贡献1773条经验 获得超3个赞
这里的clone是复制对象,就是复制了一份$query对象,包含之前的属性和方法,这里使用clone是为了避免后面的操作影响到这个$query对象。比如你后面有2个查询都要用到$query对象,一个要加where条件,另一个不加条件,这时候clone的就有作用了
$countQuery = clone $query;
$countQuery->where(['xx'=>'xx']);
$countQuery2 = clone $query;
这时候去掉clone 直接使用$query,两个查询都会带有这个条件,这明显就不对了.
你提供的代码里后续没有要用到$query对象所以去掉直接使用也没影响。
- 3 回答
- 0 关注
- 504 浏览
添加回答
举报
0/150
提交
取消