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

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

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

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

     /**
* 给每个元素执行个回调
*
* @param callable $callback
* @return $this
*/
public function each(callable $callback)
{
foreach ($this->items as $key => $item) {
$this->items[$key] = $callback($item, $key);
if ($callback($item, $key) === false) {
break;
}
} return $this;
}

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

一般情况代码过程为:

 <?php
//model里面的分页函数
public function pageQuery(){
return $this->where($where)->field(true)->order('id desc')->paginate();
} //controller里面调用方法
public function lists(){
$m = new M();
$date = $m->pageQuery();
$lists = $date->toArray();//获得数组
$this->assign('lists', $lists);
$page = $date->render();//获得分页
$this->assign('page',$page); return $this->fetch('list');
}
?>
<!--模板中使用-->
{volist name="lists['Rows']" id="vo" key='i'}
{$vo['name']}
{/volist}
<!--调用分页-->
{$page}

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

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

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

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

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

参考官网解决如下

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

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

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

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

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

 <?php
//model里面的分页函数
public function pageQuery(){
//从别的表获得参数值,一次获取,each中可以重复使用
$urs = Db::name('u')->where('isShow',1)->select();
$rs = $this->where($where)->field(true)->order('id desc')->paginate()
->each(function($item, $key) use ($urs){
//使用外部传来的参数$urs
foreach ($urs as $rkey=>$rv){
if($item['userScore']>=$rv['startScore'] && $item['userScore']<$rv['endScore']){
$item['userRank'] = $rv['rankName'];
}
}
return $item;
});
return $rs;
}
?>

paginate()出来的数据怎样循环插入数据?的更多相关文章

  1. MYSQL中创建存储过程实现向表中循环插入数据

    首先在test数据库中先创建一个表test: CREATE TABLE test( ID INT PRIMARY KEY AUTO_INCREMENT ,test_name VARCHAR(20),t ...

  2. mysql循环插入数据

    实验中经常会遇到需要多条数据的情况就想到了用SQL语句循环生成数据 DROP PROCEDURE if EXISTS test_insert; DELIMITER ;; CREATE PROCEDUR ...

  3. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)

    Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer   Advanced Installer :Free for 30 da ...

  4. 向mysql数据表中插入数据失败的原因

    1.案例代码: $sql1="insert into content(category,subject,content,username,release_date) values('{$ca ...

  5. oracle 循环插入数据

    参考链接:oracle 行转列 pivot函数基本用法 --建表 --drop table SalesList; create table SalesList( keHu varchar2(20), ...

  6. mysql中循环插入数据

    循环插入1w条数据 表结构: mysql> desc time_table; +-------+-----------+------+-----+-------------------+---- ...

  7. mysql -- 循环插入数据到表中

    备忘: 1.经搜索发现,MySql不支持直接写SQL语句实现循环插入功能. 想要实现该功能,可以用其他语言操控MySql来实现,或者用存储过程来实现(Store Procedure--SP).   2 ...

  8. AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失 ...

  9. Mysql如何向存在外键的数据表中插入数据

    1.创建表 CREATE TABLE `trn_comment_msg` ( `comMsgId` ) NOT NULL AUTO_INCREMENT COMMENT '评论消息主键', `msgId ...

随机推荐

  1. make menuconfig 笔记

    由于公司对于新CPU开发很着急,似乎明年2月份就能达到量产的目标.之前只有2个人在做平台级的开发,于是就另外抽调人手,而我就在其中.我之所心搞openwrt是因为硬件部门的样机一直未有时间表,而我总不 ...

  2. jQuery 第六章 jQuery在Ajax应用

    1.本章目标 ajax 2.ajax 异步刷新技术,我们的网页不需要全部刷新,按需实现局部刷新,上线后台的交互 用户体验好 地图,前台验证,表单提交,修改,查询等等 原生的js和ajax packag ...

  3. dynamic不能使用扩展方法

    一.方法中传入的参数为dynamic,则返回的也是dynamic类型 例如: public string Test(string str) { return str + "aa"; ...

  4. python第10天(下)

    https://www.cnblogs.com/zingp/p/6863170.html  一:IO模型介绍 IO发生时涉及的对象和步骤 对于一个网络IO(network IO),它会涉及到两个系统对 ...

  5. 纯css画直角三角形

    所有的三角形,都是通过盒子模型来设定. border(边框)的不同大小来决定 border-width: 边框的宽度 border-style: 边框的样式 border-color: 边框的颜色 1 ...

  6. SpringCloud教程 | 第三篇: 服务消费者(Feign)

    上一篇文章,讲述了如何通过RestTemplate+Ribbon去消费服务,这篇文章主要讲述如何通过Feign去消费服务.一.Feign简介 Feign是一个声明式的伪Http客户端,它使得写Http ...

  7. CSS3_综合案例

    综合案例 设置元素的 width,还可以利用 left 和 right 为了防止图片太小,background-size: 100% 100%; <!DOCTYPE html> <h ...

  8. 16进制转化8进制---map

    #include "stdio.h" #include "string.h" #include "string" #include &quo ...

  9. 去除CKFinder版权提示信息

    CkFinder版权提示有两个地方,分别在树形列表下方和文件列表框上部,可以通过修改CSS来隐藏内容 因原始JS文件中的文本都是编码过的,类似 var x="\103\x6f\156\x6e ...

  10. Unity进阶----AssetBundle_02(加载依赖关系及网络资源)(2018/10/31)

    网络资源加载: string path ="file://"+ Application.streamingAssetsPath + "\\windows\\123&quo ...