• 视图模型和分页


    一. 视图模型
    关联模型可以解决一对一、一对多和多对多等关联操作。它们通过生成多条 SQL 语句
    然后进行数组拼装得到最终想要的结果。对于一对一这种 HAS_ONE 和 BELONGS_TO 的多表
    关联查询,可以使用视图模型。它采用的是联合查询(JOIN),非常适合此类查询需求。

    在 WeiBo/Home/Controller/UserController.class.php 中的代码为:

    1 class UserController extends Controller {
    2     public function index() {
    3         $user = D('UserView');
    4         var_dump($user->group('id')->select());
    5     }
    6  }

    注意,数据表中没有UserView的表

    新建 WeiBo/Home/Model/UserViewModel.class.php ,代码为:

     1 <?php
     2 namespace HomeModel;
     3 use ThinkModelViewModel;
     4 
     5 class UserViewModel extends ViewModel {
     6     protected $viewFields = array(
     7        'User'=>array('id','user','email',),
     8       'Card'=>array('code','_on'=>'User.id=Card.uid'),
     9         );
    10 }

    这时,就能将数据表中的user表和Card表连接起来:

    其中user表为:

    card表为:

    连接后的数据为:

    PS:使用关联查询,显示 User 表且包含 Card 表关联的数据,未关联的则忽略。如果
    想把未关联的查询出来,可以使用 LEFT 左查询。

    1 //LEFT JOIN
    2 'User'=> array('id','user','email','_type'=>'LEFT'),
    1 //使用group分组去除重复数据
    2 var_dump($user->group('id')->select());
    1 //使用COUNT得到关联的条数
    2 'User'=> array('id','user', 'email','_type'=>'LEFT','COUNT(Content.id)'=>'abc'),

    二、分页功能

    在 WeiBo/Home/Controller/UserController.class.php 中插入代码:

     1 <?php
     2 namespace HomeController;
     3 use ThinkController;
     4 use ThinkPage;
     5 
     6 class UserController extends Controller {
     7     public function index() {
     8         $user = D('User');
     9         $count = $user->count();
    10         $page = new Page($count,1);
    11         $page->setConfig('first','首页');
    12         $page->setConfig('prev','上一页');
    13         $page->setConfig('next','下一页');
    14         $page->setConfig('last','末页');
    15         $page->setConfig('theme', ' 共 %TOTAL_ROW% 条数据 共%TOTAL_PAGE%页 %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%');
    16         $show = $page->show();
    17         $list = $user->limit($page->firstRow,$page->listRows)->select();
    18         $this->assign('list',$list);
    19         $this->assign('page',$show);
    20         $this->display();
    21     }
    22  }

    在 WeiBo/Home/View/User/index.html 中的代码如下:

    1 <table border="1">
    2      <tr><th>id</th><th>user</th><th>email</th></tr>
    3      <foreach name="list" item="obj">
    4          <tr><td>{$obj.id}</td><td>{$obj.user}</td><td>{$obj.email}</td></tr>
    5      </foreach>
    6 </table>
    7 {$page}

    显示的效果如下图:

    注意:这时这里没有"首页”和"末页",下次记得去看一下手册哪里出问题了

    1 //设置分页变量名
    2 'VAR_PAGE'=>'page',

    如果没设置的话,url形式为 http://localhost/demo39/index.php/User/index/p/2.html 

    设置后为: http://localhost/demo39/index.php/User/index/page/2.html 

    还有一种分页的方法为:
    在 WeiBo/Home/Controller/UserController.class.php 中的代码为:

     1 <?php
     2 namespace HomeController;
     3 use ThinkController;
     4 use ThinkPage;
     5 
     6 class UserController extends Controller {
     7     public function index() {
     8         $user = D('User');
     9         $list = $user->page($_GET['page'].',1')->select();
    10         $count = $user->count();
    11         $page = new Page($count,1);
    12         $show = $page->show();
    13         $this->assign('list',$list);
    14         $this->assign('page',$show);
    15         $this->display();
    16     }
    17  }

    注意,在每页显示多少条时, $page = new Page($count,1); 中后面的1必须

    和 $list = $user->page($_GET['page'].',1')->select(); 中的1相同。

     WeiBo/Home/View/User/index.html 中的代码保持不变

  • 相关阅读:
    Centos8 静态IP设置
    2022年1月6号 LocalDateTime触发列无效问题
    2021年12月14日复盘(Oracle Not In,Limit 1000)
    2022年1月2日复盘 线上CPU飙升
    2021年12月16日复盘 JSQLParser 命中Oracle关键词报错
    2022年1月5号 on update CURRENT_TIMESTAMP无效情况记录
    2021年12月21日复盘 雪花算法 服务器时钟偏移错误
    Centos替换源
    2021年12月9日复盘 前端日期少8小时
    WPF中DataContext作用
  • 原文地址:https://www.cnblogs.com/jacson/p/4621194.html
Copyright © 2020-2023  润新知