文章出處

一. 視圖模型
關聯模型可以解決一對一、一對多和多對多等關聯操作。它們通過生成多條 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 中的代碼保持不變


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()