zoukankan      html  css  js  c++  java
  • paginate()出来的数据怎样循环插入数据?

    paginate()出来的数据怎样循环插入数据?

    paginate()分页如何转数组操作数据之后再转回对象?

    thinkphp5 model里面用toarray后怎么分页?

     需要先修改Paginator.php里的文件.

     1     /**
     2      * 给每个元素执行个回调
     3      *
     4      * @param  callable $callback
     5      * @return $this
     6      */
     7     public function each(callable $callback)
     8     {
     9         foreach ($this->items as $key => $item) {
    10             $this->items[$key] = $callback($item, $key);
    11             if ($callback($item, $key) === false) {
    12                 break;
    13             }
    14         }
    15 
    16         return $this;
    17     }

    以上类似问题的出现,是因为在model模型中使用了->paginate()分页,由于返回的是对象,所以要把数据转换到数组,才能在模板中循环输出(官网说可以直接使用,我还没搞懂)

    一般情况代码过程为:

     1 <?php
     2 //model里面的分页函数
     3 public function pageQuery(){    
     4     return $this->where($where)->field(true)->order('id desc')->paginate();
     5 }
     6  
     7 //controller里面调用方法
     8 public function lists(){
     9     $m = new M();
    10     $date = $m->pageQuery();
    11     $lists = $date->toArray();//获得数组
    12     $this->assign('lists', $lists);
    13     $page = $date->render();//获得分页
    14     $this->assign('page',$page);
    15      
    16     return $this->fetch('list');
    17 }
    18 ?>
    19 <!--模板中使用-->
    20 {volist name="lists['Rows']" id="vo" key='i'}
    21     {$vo['name']}
    22 {/volist}
    23 <!--调用分页-->
    24 {$page}

    但是,如果从数据库调取的数据需要循环处理怎么办呢?比方说增加字段或进行数字加减判断等。

    我们可以这样->paginate()->toArray(),然后利用foreach循环,在数据记录里面增加字段等操作,如

    1 foreach ($page['Rows'] as $key => $v){
    2     $page['Rows'][$key]['imgSize'] = round($v['imgSize']/1024/1024,2);
    3 }

    循环之后的数据怎么再转回对象或是利用->render()分页呢?这就比较麻烦了。

    官网给出了解决办法https://www.kancloud.cn/manual/thinkphp5/154294

     参考官网解决如下

     1 <?php
     2 //model里面的分页函数
     3 public function pageQuery(){    
     4     $rs = $this->where($where)->field(true)->order('id desc')->paginate()
     5     ->each(function($item, $key){
     6         if($item['status']==1){
     7             $item['name1'] = $item['name2'];
     8         }
     9         $item['imgSize'] = round($item['imgSize']/1024/1024,2);
    10         return $item;
    11     });
    12     return $rs;
    13 }
    14 ?>

    然后控制器和模板里面还正常使用就行

    如果each里面涉及到别的表,则代码如下:

     1 <?php
     2 //model里面的分页函数
     3 public function pageQuery(){    
     4     $rs = $this->where($where)->field(true)->order('id desc')->paginate()   
     5     ->each(function($item, $key){
     6         $urs = Db::name('u')->where('isShow',1)->select();
     7         foreach ($urs as $rkey=>$rv){
     8             if($item['userScore']>=$rv['startScore'] && $item['userScore']<$rv['endScore']){
     9                $item['userRank'] = $rv['rankName'];
    10             }
    11         }
    12         return $item;
    13     });
    14     return $rs;
    15 }
    16 ?>

    如果each里面涉及到外部参数,则代码如下:

     1 <?php
     2 //model里面的分页函数
     3 public function pageQuery(){
     4 //从别的表获得参数值,一次获取,each中可以重复使用
     5 $urs = Db::name('u')->where('isShow',1)->select(); 
     6 $rs = $this->where($where)->field(true)->order('id desc')->paginate() 
     7 ->each(function($item, $key) use ($urs){ 
     8 //使用外部传来的参数$urs
     9 foreach ($urs as $rkey=>$rv){
    10 if($item['userScore']>=$rv['startScore'] && $item['userScore']<$rv['endScore']){
    11   $item['userRank'] = $rv['rankName'];
    12 }
    13 }
    14 return $item;
    15 });
    16 return $rs;
    17 }
    18 ?>
    人生得意须尽欢,莫使金樽空对月.
  • 相关阅读:
    序列化和反序列化
    抽象类与接口
    为了忘却的纪念
    gmail和hotmail也有企业邮局
    tag's tag
    在互联网上裸奔
    音乐网站,可以自己弹琴,歌谱整理
    今天看了ning的介绍,很有意思
    昨天服务器出现问题,解决过程如下所述
    google Trends
  • 原文地址:https://www.cnblogs.com/luojie-/p/10523546.html
Copyright © 2011-2022 走看看