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. 配置php5.6.4 + Apache2.4.10

    一.下载并安装apache 下载地址:www.apachelounge.com 解压后:执行以下命令: #httpd.exe –k install #httpd.exe -k start 在执行过程中 ...

  2. Metaphor of topological basis and open set

    The definition of topological basis for a space $X$ requires that each point $x$ in $X$ is contained ...

  3. SQL反模式学习笔记7 多态关联

    目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_T ...

  4. Servlet(九):web.xml文件和server.xml文件

    Web.xml 文件使用总结:作用: 存储项目相关的配置信息,保护 Servlet.解耦一些数据对程序的依赖.使用位置: 每个 Web 项目中Tomcat 服务器中(在服务器目录 conf 目录中)区 ...

  5. KaliLinuxNetHunter教程实施刷机解锁Bootloader

    KaliLinuxNetHunter教程实施刷机解锁Bootloader 当用户将前面的工作都准备完成后,即可开始刷机.其中,整个刷机过程分为三个步骤,分别是解锁Bootloader.刷入第三方Rec ...

  6. struts2的java.lang.NoSuchMethodException错误

    不久前在学习struts时出现这个错误,在网上搜索了半天,发现答案不一.将其总结如下,以方便大家参考. 1. 你有没有试试看 其它的方法能不能用,要是都是这种情况的话,可能是你的Action类没有继承 ...

  7. NEO GUI 多方签名使用

    众所周至,NEOGUI是一个开发者演示用钱包,使用体验是非常的不友好的. 今天本来打算使用多方签名账户,发现和想象的不一样,请教了小伙伴也不行.遂调试了一下原因,发现踩进坑里了.     把这个问题记 ...

  8. Mouse w/o Borders实现两台主机共用一套键鼠方法及问题处理

    因为经常遇到同时用到实验室配备的主机和自己的笔记本同时使用的场景,两台设备需要切换两套键鼠很麻烦,这里介绍一个微软开发的一个免费软件Microsoft Garage Mouse without Bor ...

  9. jmeter--接口自动化jmeter+ant+jenkins

    的 一.介绍 接口自动化工具:jmeter+ant+jenkins 流程: -1.jmeter已录制或手动设置好脚本后 -2.配置ant,使用Ant工具,进行批量执行jmeter的脚本 -3.使用Je ...

  10. Array,prototype.concat.apply与[].conat.apply.

    一直都知道JS数组Array内置对象有一个concat方法,但是也没怎么研究过,今天偶然就看了看 concat是连接一个或多个数组 返回的是连接后数组的一个副本 var oldArr=[]; var ...