PHP头条
热点:

ThinkPHP数据库视图模型


ThinkPHP 数据库视图模型

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

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

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

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

现有 user 表和 article 表如下(表前缀为
test_):
user 用户表(略):
article 文章表(略):
创建视图模型文件




  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. }
  7. ?>

在该视图模型文件中,模型类继承 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. }
  11. }
  12. ?>

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




  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [aid] => 1
  6. [title] => 文章1
  7. [content] => 文章1具体内容……
  8. [username] => admin
  9. )

  10. [1] => Array
  11. (
  12. [aid] => 2
  13. [title] => 文章2
  14. [content] => 文章2具体内容……
  15. [username] => Jack
  16. )

  17. )

执行的 SQL 语句为:




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

从上面的结果可以看出,视图模型是利用了 JOIN查询 模拟了数据库视图的实现,将多张表的数据汇聚到一起。

www.phpzy.comtrue/phpkj/12280.htmlTechArticleThinkPHP数据库视图模型 ThinkPHP 数据库视图模型 注意:本文中的视图,是指数据库视图模型,而非 ThinkPHP 中的 View 视图类实现。 数据库视图是指从一个或几个基本表中根据用户需要,提...

相关文章

相关频道:

PHP之友评论

今天推荐