THINKPHP 提供数据表联合查询的简单方法
2017-09-26 09:09
651 查看
ThinkPHP 数据库视图模型
注意:本文中的视图,是指数据库视图模型,而非 ThinkPHP 中的 View 视图类实现。数据库视图是指从一个或几个基本表中根据用户需要,提取出需要的数据列而做成一个虚表。这样就不必根据 a 表数据再去查询 b 表,c 表... 等有关系的表而方便的一次性将数据查询出来。
视图在有些数据库下面并不被支持,ThinkPHP 模拟实现了数据库的视图,该功能可以用于多表联合查询。
要在 ThinkPHP 中使用视图模型,只需要继承 ViewModel,然后设置 viewFields 属性,使用 D方法实例化模型 即可。
视图模型实例
现有 user 表和 article 表如下(表前缀为 test_):uid | username | password | 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
从上面的结果可以看出,视图模型是利用了 JOIN查询 模拟了数据库视图的实现,将多张表的数据汇聚到一起。
参考地址:http://www.5idev.com/p-thinkphp_database_view.shtml
相关文章推荐
- PHP开发之THINKPHP多表联合查询操作的三中方法
- 一个简单的方法查询一列数据为一行
- ThinkPHP多表联合查询的常用方法
- ThinkPHP+jQuery EasyUI Datagrid查询数据的简单处理
- (转)ThinkPHP find方法 查询一条数据记录
- 连接数据库及数据查询的简单实现方法
- PHP开发之THINKPHP多表联合查询操作的三中方法
- ThinkPHP 中 M 方法查询数据库最后使用 find() 导致返回结果集 foreach 数据不对的问题
- MSSql简单查询出数据表中所有重复数据的方法
- 使用wxsqlite3后多表联合查询无数据的问题解决方法
- thinkphp数据查询方法总结select ,find,getField,query
- C#简单查询SQLite数据库是否存在数据的方法
- ThinkPHP find方法 查询一条数据记录
- ThinkPHP多表联合查询的常用方法
- ThinkPHP多表联合查询的常用方法
- thinkphp 查询当天 ,本周,本月,本季度,本年度,全部, 数据方法
- PHP开发之THINKPHP多表联合查询操作的三中方法
- JdbcTemplate查询数据中两种处理结果集方法的简单比较
- 根据会员编号、会员名称、会员积分、店铺编号查询数据的简单方法(sql语句)
- VB6数据导出到Excel文件,一种设计界面查询条件的方法,一种简单加密方法(改写)