tp5分页+循环子字段

需求:显示用户订单,且每一条订单显示相应的商品,且分页

环境:数据库目前订单表只有一个,订单的商品列表储存在这条订单中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);

解析一下:

  1. 为什么要用
$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>






原文地址:https://www.cnblogs.com/chenliuxiao/p/12517503.html