thinkphp5分页paginate()出来的数据怎样循环插入数据?
taotaoit ThinkPHP5.1 2017-11-29 3552 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

7440897 2655 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)

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

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

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


以上类似问题的出现,是因为在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

from clipboard

参考官网解决如下

<?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;
}
?>

传递外部参数,重点在于->each(function($item, $key) use ($urs){ 红色部分

重点介绍请访问http://taotaoit.com/article/details/318.html


20240404

如果不想用或者特殊情况不能用->paginate() ->each这种形式追加数据,怎么办?

1,首先,->paginate()->toArray()是不行的,破坏原有数据结果,前面分页就不能用了。

2,前台分页还能用。参考网址https://blog.csdn.net/longxiao_love/article/details/115029185

$rs = model('shop')->where($where)
			->paginate(input('pagesize/d'), false, ['query' => request()->param()]);
		$list=$rs->all();
		foreach ($list as $key => $v) {
			$v['haha'] = '哈哈';
			$rs[$key]=$v;
		}
		dump($rs);
		die;

版权声明:本站原创文章,允许自由转载。

相关推荐
Non-static method think\Config::get() should not be called statically
ThinkPHP5.1 | 2018-12-29 10949
原来是这样use think\Config; 改成这样use think\facade\Config; 下面是官方手册的解释 配置获取 要使用Config类,首先需要在你的类文件中引入 use think\facade\Config; 或者(因为系统做了类库别名,其实就是调用think\facade\Config) u...
thinkPHP5 order多条件排序
ThinkPHP5.1 | 2017-10-24 10809
总结如下: //单一条件排序 $user = $this->where(['parentId'=>0)->field('userId,userName,userSort,isShow')->order('userSort', 'asc')->select(); //多个条件排序,可以多加一个order...
评论:0条
评论加载中...
发表评论