paginate()出来的数据怎样循环插入数据?
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()出来的数据怎样循环插入数据?的更多相关文章
- MYSQL中创建存储过程实现向表中循环插入数据
首先在test数据库中先创建一个表test: CREATE TABLE test( ID INT PRIMARY KEY AUTO_INCREMENT ,test_name VARCHAR(20),t ...
- mysql循环插入数据
实验中经常会遇到需要多条数据的情况就想到了用SQL语句循环生成数据 DROP PROCEDURE if EXISTS test_insert; DELIMITER ;; CREATE PROCEDUR ...
- 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 ...
- 向mysql数据表中插入数据失败的原因
1.案例代码: $sql1="insert into content(category,subject,content,username,release_date) values('{$ca ...
- oracle 循环插入数据
参考链接:oracle 行转列 pivot函数基本用法 --建表 --drop table SalesList; create table SalesList( keHu varchar2(20), ...
- mysql中循环插入数据
循环插入1w条数据 表结构: mysql> desc time_table; +-------+-----------+------+-----+-------------------+---- ...
- mysql -- 循环插入数据到表中
备忘: 1.经搜索发现,MySql不支持直接写SQL语句实现循环插入功能. 想要实现该功能,可以用其他语言操控MySql来实现,或者用存储过程来实现(Store Procedure--SP). 2 ...
- AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失 ...
- Mysql如何向存在外键的数据表中插入数据
1.创建表 CREATE TABLE `trn_comment_msg` ( `comMsgId` ) NOT NULL AUTO_INCREMENT COMMENT '评论消息主键', `msgId ...
随机推荐
- 梯有N阶,上楼可以一步上一阶,也可以一步上二阶。编写一个程序,计算共有多少中不同的走法?
c语言实现,小伙伴们谁要有更好的实现方法,要告诉我呦 #include int main(void) { int f,i,f1=1,f2=2; printf("请输入楼梯数"); ...
- Nginx Linux详细安装部署教程
一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...
- php实现微信企业向用户付款
<?php header('content-type:text/html;charset=utf-8'); $data['mch_appid']='##################';//商 ...
- tensorflow结果可视化-【老鱼学tensorflow】
这次我们把上次的结果进行可视化显示,我们会把神经网络的优化过程以图像的方式展示出来,方便我们了解神经网络是如何进行优化的. 首先,我们把测试数据显示出来: # 显示测试数据 fig = plt.fig ...
- android setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds区别
手工设置文本与图片相对位置时,常用到如下方法: setCompoundDrawables(left, top, right, bottom) setCompoundDrawablesWithIntri ...
- golang map 读写锁与深度拷贝的坑
0X01 golang中,map(字典)无法并发读写 简单来说,新建万条线程对同一个map又读又写,会报错. 为此,最好加锁,其实性能影响并不明显. type taskCache struct{ sy ...
- C# ref与out关键字解析
简介:ref和out是C#开发中经常使用的关键字,所以作为一个.NET开发,必须知道如何使用这两个关键字. 1.相同点 ref和out都是按地址传递,使用后都将改变原来参数的数值. 2.ref关键字 ...
- Google代码规范
文件名 文件名须全部小写,下划线(_)和短横线(-) 源文件采用 UTF-8 编码. 非空代码块:K&R 风格 左花括号不另起新行 左花括号后紧跟换行 右花括号前需要换行 如果右花括号结束了语 ...
- spring-boot-maven-plugin 安装本地jar 包
本地使用nexus 进行maven仓库管理.项目deploy 引入之后,总是找不到jar中定义的class或者配置文件等. 从截图上可以看到虽然class文件是有的,但是引用的时候却是找不到的. Sp ...
- Java 读取 Json格式的 内容
一.Json 报文格式如下: 二.获取 Json 报文中字段的内容 import java.io.IOException; import com.fasterxml.jackson.core.Json ...