好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ThinkPHP 数据库视图模型 - Thinkphp

ThinkPHP 数据库视图模型

注意:本文中的视图,是指数据库视图模型,而非 ThinkPHP 中的 View 视图类实现.

数据库视图是指从一个或几个基本表中根据用户需要,提取出需要的数据列而做成一个虚表,这样就不必根据 a 表数据再去查询 b 表,c 表... 等有关系的表而方便的一次性将数据查询出来.

视图在有些数据库下面并不被支持,ThinkPHP 模拟实现了数据库的视图,该功能可以用于多表联合查询.

要在 ThinkPHP 中使用视图模型,只需要继承 ViewModel,然后设置 viewFields 属性,使用 D方法实例化模型 即可.

视图模型实例

现有 user 表和 article 表如下(表前缀为 test_):

uid username password email regdate    1 admin b7e591c246d010bb2ccd77d52490c85e admin@5idev.com 1277992339    2 小明 a193686a53e4de85ee3f2ff0576adf01 xiao@163.com 1278063917    3 Jack 0193686a35e4de85ee3f2ff0567adf49 jack@gmail.com 1278061380    aid title content add_time cid uid    1 文章1 文章1正文内容…… 1277993339 1 1    2 文章2 文章2正文内容…… 1277994339 2 3 

创建视图模型文件:

<?php  class  ArticleViewModel  extends  ViewModel{  public   $viewFields  =  array (  'article' => array ( 'aid' , 'title' , 'content' , 'uid' ),  'user' => array ( 'username' , '_on' => 'article.uid=user.uid' ),  );  }  ?> 

在该视图模型文件中,模型类继承 ViewModel 视图模型,并定义 $viewFields 属性,每个元素包括了数据表及对应要查询的字段,在每个表元素中,通过定义 _on 元素来定义关联查询条件.

将该文件保存为 Lib/Model/ArticleViewModel.class.php.

在 Action 操作中使用视图模型

在模块操作中,使用 D 方法来实例化视图模型:

<?php  class  ArticleAction  extends  Action{  public   function  index(){  header( "Content-Type:text/html; charset=utf-8" );  $Dao  = D( 'ArticleView' );  // 实例化视图   $article_list  =  $Dao ->select();  print_r( $article_list );  echo   '<br /><br />' ;  // 打印出执行的 SQL 语句   echo   '执行的 SQL 语句为:' . $Dao ->getLastSql();  }  }?> 

访问该方法,打印出结果如下:

Array(  [0] = >  Array(  [aid] = >  1,  [title] = >  文章1,  [content] = >  文章1具体内容……,  [username] = >  admin,  )  [1] = >  Array(  [aid] = >  2,  [title] = >  文章2,  [content] = >  文章2具体内容……,  [username] = >  Jack,  )  ) 

执行的 SQL 语句为:

SELECT article.aid AS aid,article.title AS title,article.content AS content,article.uid AS uid,user.username AS username FROM test_article article JOIN test_user user ON article.uid=user.uid

查看更多关于ThinkPHP 数据库视图模型 - Thinkphp的详细内容...

  阅读:79次