为了账号安全,请及时绑定邮箱和手机立即绑定

yii2分页中使用 clone作用

yii2分页中使用 clone作用

PHP
慕尼黑5688855 2019-03-18 18:08:07
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感觉没多大必要,不知道其他人怎么看?

查看完整回答
反对 回复 2019-03-18
?
慕容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对象所以去掉直接使用也没影响。

查看完整回答
反对 回复 2019-03-18
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

个人感觉clone还是要带上

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 504 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信