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