视图模型和分页

一. 视图模型
关联模型可以解决一对一、一对多和多对多等关联操作。它们通过生成多条 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 Home\Model;
 3 use Think\Model\ViewModel;
 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 Home\Controller;
 3 use Think\Controller;
 4 use Think\Page;
 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 Home\Controller;
 3 use Think\Controller;
 4 use Think\Page;
 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 中的代码保持不变

转载于:https://www.cnblogs.com/jacson/p/4621194.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值