php框架

 首页 > php框架 > ThinkPHP > ThinkPHP 数据库视图模型 - Thinkphp

ThinkPHP 数据库视图模型 - Thinkphp

分享到:
【字体:
导读:
          注意:本文中的视图,是指数据库视图模型,而非 ThinkPHP 中的 View 视图类实现 数据库视图是指从一个或几个基本表中根据用户需要,提取出需要的数据列而做成一个虚表,这样就不必根据 a 表...

ThinkPHP 数据库视图模型

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

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

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

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

视图模型实例

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

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

创建视图模型文件:

  1. class ArticleViewModel extends ViewModel{ 
  2. public $viewFields = array
  3. 'article'=>array('aid','title','content','uid'), 
  4. 'user'=>array('username','_on'=>'article.uid=user.uid'), 
  5. ); 
  6. ?> 

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

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

在 Action 操作中使用视图模型

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

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

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

  1. Array( 
  2. [0] => Array( 
  3. [aid] => 1, 
  4. [title] => 文章1, 
  5. [content] => 文章1具体内容……, 
  6. [username] => admin, 
  7. [1] => Array( 
  8. [aid] => 2, 
  9. [title] => 文章2, 
  10. [content] => 文章2具体内容……, 
  11. [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
thinkphp邮件发送 PHP是自带可以发送邮件的Mail()函数的,但需要在php.ini配置,本文将介绍一种简单的通过PHPMailer发送邮件的方法. 而PHPMailer是一个用于发送电子邮件的PHP函数包,它可以使用SMTP的方法通过163、QQ邮箱等第三方服务器发送邮件,这样还有一个好处,就是这些大型邮箱发出的邮件...
ThinkPHP 多语言配置 - Thinkphp
ThinkPHP 多语言配置 ThinkPHP 内置了对多语言的支持,如果应用项目涉及到国际化,那么可以定义相关的语言包文件以实现多语言支持,这里涉及的多语言支持是指模板语言,数据的多语言转换(翻译)不在这个范畴之内. 在项目配置文件里添加如下参数以开启多语言的支持: 'LANG_SWITCH_ON&#0...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……