需求:显示用户订单,且每一条订单显示相应的商品,且分页
环境:数据库目前订单表只有一个,订单的商品列表储存在这条订单中booklist字段中,以逗号隔开商品ID,字符串的形式保存
后台代码
$where = ['money_type'=>0]; $list = Db::table('xxxdingdan')->where($where)->paginate(4);//订单表 $page = $list->render(); $list = $list->all(); foreach($list as $k=>$v){ $arr = explode(",",$v['booklist']); $wherebook['id'] = array('in', $arr); $list[$k]["booklist"] = Db::table('xxxshangpin')->where($wherebook)->select();//商品表 } $this->assign('list',$list); $this->assign('page',$page);
解析一下:
- 为什么要用
$list = $list->all();
因为
->paginate(4);
之后的数据是变成了对象型的数据,没办法foreach操作后续,所以用
all()函数来变为数组,用toarray函数也可以,个人感觉all更方便一点,看具体的数据类型选择
2、之前采用的办法是在前台端进行 {$list->render()} 操作,如果按照上述方法这样执行的话会出现一个问题,就是这个list数据已经由分页对象转化为数组了,前端再调用的时候就会报错。
于是便$page = $list->render();在还未循环之前写上这段代码,提前赋值
最后再看下前端代码
<ul> {volist name="list" id="vo"} <li class="of "> <p class="of"> <span class="fl"><i>订单号:</i> {$vo.order_card}</span> <span class="fr">未付款</span> </p> <ul class=""> {volist name="$vo['booklist']" id="v"} <li> <img src="...{$v.upload_img}" alt=""> <p>{$v.book_name}</p> </li> {/volist} </ul> <p>总金额:{$vo.money}</p> </li> {/volist} </ul> <p> {$page} </p>