php paginate使用方法,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()分页,由于返回的是对象,所以要把数据转换到数组,才能在模板中循环输出(官网说可以直接使用,我还没搞懂)

一般情况代码过程为:

//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

7b00f1888f21b2bab2b803f5b52bf280.png

参考官网解决如下

//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里面涉及到别的表,则代码如下:

//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']

$item['userRank'] = $rv['rankName'];

}

}

return $item;

});

return $rs;

}

?>

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

//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']

$item['userRank'] = $rv['rankName'];

}

}

return $item;

});

return $rs;

}

?>

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 ...

向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 ...

随机推荐

js如何判断一个数组

typeof [] 为一个"object" 不能通过此方法判断一个数组 方法 1.instanceof方法,这个方法用的比较多. 2.这个是es5以后推荐的方法,Object.pr ...

HBase数据模型剖析

出处:http://wuyudong.com/1987.html HBase 进行数据建模的方式和你熟悉的关系型数据库有些不同.关系型数据库围绕表.列和数据类型——数据的形态使用严格的规则.遵守这些严 ...

[leetcode]_Best Time to Buy and Sell Stock I && II

一个系列三道题,我都不会做,google之答案.过了两道,第三道看不懂,放置,稍后继续. 一.Best Time to Buy and Sell Stock I 题目:一个数组表示一支股票的价格变换. ...

MySQL的数据库引擎

Mysql的数据库引擎有很多,最重要的就是MyISAM.InnoDB.heap(memory),此外还有BDB.archive数据表.csv.ndb.federated InnoDB   优点: 1. ...

GDataXMLNode创建和解析XML

GDataXMLNode创建xml: #import 2 #import "GDataXMLNode.h" 3 4 ...

SQLServer2008找出所有包含172.17.224.40字样的存储过程

SQLServer2008 找出所有包含172.17.224.40的存储过程   select distinct name from syscomments a,sysobjects b where ...

Go数组、切片、映射的原理--简明解析

数组.切片.映射是Golang的最重要的数据结构,下面是对这3种数据结构的一点个人总结: 一.数组 数组是切片和映射的基础数据结构. 数组是一个长度固定的数据类型,存储着一段具有相同数据类型元素的连续 ...

NOIP-Vigenère密码

题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法―― Vigenère 密码. Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国 ...

spring cloud 入门,看一个微服务框架的「五脏六腑」

Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...

python3 之__str__

当某个类定义了__str__方法是,打印该类的实例对象就是打印__str__方法return出来的数据 示例: class Cat: """定义了一个Cat类" ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Laravel 中,我们可以通过自定义 Paginator 类来实现自定义分页数据结构。 首先,我们需要创建一个新的 Paginator 类,可以在 `app` 目录下创建一个 `CustomPaginator.php` 文件。在这个类中,我们需要继承 Laravel 内置的 Paginator 类,并实现 `__construct` 和 `toArray` 方法。例如: ```php <?php namespace App; use Illuminate\Pagination\Paginator; class CustomPaginator extends Paginator { public function __construct($items, $perPage, $currentPage, $options = []) { parent::__construct($items, $perPage, $currentPage, $options); } public function toArray() { return [ 'data' => $this->items->toArray(), 'pagination' => [ 'total' => $this->total(), 'count' => $this->count(), 'per_page' => $this->perPage(), 'current_page' => $this->currentPage(), 'total_pages' => $this->lastPage() ] ]; } } ``` 在上面的代码中,我们在 `toArray` 方法中定义了自定义的分页数据结构,包括数据分页信息。其中,`data` 表示当前页的数据,`pagination` 表示分页信息。你可以根据自己的需求修改这个数据结构。 然后,在使用自定义分页数据结构的时候,可以使用 `CustomPaginator` 类来实现。例如: ```php use App\CustomPaginator; $items = DB::table('users')->paginate(15); $customPaginator = new CustomPaginator($items->items(), $items->perPage(), $items->currentPage()); $result = $customPaginator->toArray(); ``` 在上面的代码中,我们先使用内置的 `paginate` 方法来获取分页数据,然后将其换成自定义的分页数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值