mysql的表关联其实就是将多个表的数据联系到一起,然后临时生成一张表,方便读取数据。而在ThinkPHP中视图表同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。    

   接下来开始创建表gl_blog:



SET                     FOREIGN_KEY_CHECKS=0;         
          -- ----------------------------         
          -- Table structure for `gl_blog`         
          -- ----------------------------         
          DROP                     TABLE                     IF EXISTS `gl_blog`;         
          CREATE                     TABLE                     `gl_blog` (         
                    `id`           int          (11)           NOT                     NULL                     auto_increment,         
                    `          name          `           varchar          (200)           default                     NULL          ,         
                    `title`           varchar          (200)           default                     NULL          ,         
                    `category_id` tinyint(4)           default                     NULL          ,         
                    `          user          `           varchar          (200)           default                     NULL          ,         
                    PRIMARY                     KEY                      (`id`)         
          ) ENGINE=InnoDB           DEFAULT                     CHARSET=utf8;



 

 

gl_category


SET                     FOREIGN_KEY_CHECKS=0;         
          -- ----------------------------         
          -- Table structure for `gl_category`         
          -- ----------------------------         
          DROP                     TABLE                     IF EXISTS `gl_category`;         
          CREATE                     TABLE                     `gl_category` (         
                    `id`           int          (11)           NOT                     NULL                     auto_increment,         
                    `title`           varchar          (200)           default                     NULL          ,         
                    PRIMARY                     KEY                      (`id`)         
          ) ENGINE=InnoDB           DEFAULT                     CHARSET=utf8;



 

gl_user



SET                     FOREIGN_KEY_CHECKS=0;         
          -- ----------------------------         
          -- Table structure for `gl_user`         
          -- ----------------------------         
          DROP                     TABLE                     IF EXISTS `gl_user`;         
          CREATE                     TABLE                     `gl_user` (         
                    `id`           int          (11)           NOT                     NULL                     auto_increment,         
                    `          name          `           varchar          (200)           default                     NULL          ,         
                    PRIMARY                     KEY                      (`id`)         
          ) ENGINE=InnoDB           DEFAULT                     CHARSET=utf8;



 

   新建入口文件,生成项目文件,设置编码为utf-8(可以根据自己的需要来)

在Model文件夹里新建BlogViewModel.class.php

内容:



class                     BlogViewModel           extends                     ViewModel {         
          public                     $viewFields                     =           array          (           
          'Blog'          =>          array          (          'id'          ,          'name'          ,          'title'          ),          
          'Category'          =>          array          (          'title'          =>          'category_name'          ,          '_on'          =>          'Blog.category_id=Category.id'          ),               'User'         
          =>          array          (          'name'          =>          'username'          ,          '_on'          =>          'Blog.user_id=User.id'          ),   );}



 

'Blog'=>array('id','name','title');

Blog表中要显示的字段,和数据表相对应

 

'title'=>'category_name',

给Category表中的title定义别名为category_name,如果不想可以不定义

 

'_on'=>'Blog.category_id=Category.id'

'_on'将两个表建立联系,也就是Blog表中的category_id和Category中的id字段相对应,如果Category表中有多哥要显示的字段,可以直接array('title'=>'category_name',在array中添加即可,


还有几种用法,

array('title'=>'category_name'   指定表名

'_as'=>'myBlog'        给当前的数据表定义别名

'_type'=>'LEFT'        左关联还是右关联

 

至于User表和Blog表建立的联系,就不说了,大家应该都能看懂了。

 

 

写完了下来就是使用的了

在IndexAction.class.php写



$Model                     = D(          "BlogView"          );          $Model          ->field(          'id,name,title,category_name,username'          )->where(          'id>10'          )->order(          'id desc'          )->select();



 

 

初始化BlogView视图模型的类,查询id,name,title,category_name,username字段,条件id大于10,降序排列

 

 

   是不是非常简单?呵呵。学了ThinkPHP有两个月了,发现ThinkPHP非常的人性化,尽量去简化很多操作,不过可能有些会额外的增加开销。这个可以在精通ThinkPHP以后,根据自己项目条件不同,去适当修改优化ThinkPHP,推荐如果想学习ThinkPHP的朋友可以去研究研究ThinkSNS的例子,非常不错