thinkphp(3.1)中数据库操作中视图模型的创建与使用
2013-11-18 00:18:25;  来源:追太阳;  作者:逐日者;  评论:0 点击:

在创建视图模型的时候你需要注意的两点:1 模型文件的路径和命名:2 对于模型进行where条件限制的时候防止字段冲突最好在字段之前加上表明
在创建视图模型的时候你需要注意的两点:
1.模型文件的路径和命名:
例如我的应用组名为APP,则位置在 APP/Lib/Model下添加;
命名以XxxViewModel.class.php的格式来命名,前面是驼峰命名法规则,后缀一定要是.class.php
2.对于模型进行where条件限制的时候防止字段冲突最好在字段之前加上表明。

分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。
视图在有些数据库下面并不被支持,但是ThinkPHP模拟实现了数据库的视图,该功能可以用于多表联合查询。非常适合解决HAS_ONE 和 BELONGS_TO 类型的关联查询。
要定义视图模型,只需要继承ViewModel,然后设置viewFields属性即可。例如下面的例子,我们定义了一个BlogView模型对象,其中包括了Blog模型的id、name、title和User模型的name,以及Category模型的title字段,我们通过创建BlogView模型来快速读取一个包含了User名称和类别名称的Blog记录(集)。
  1. class BlogViewModel extends ViewModel {
  2.    public $viewFields = array(
  3.      'Blog'=>array('id','name','title'),
  4.      'Category'=>array('title'=>'category_name''_on'=>'Blog.category_id=Category.id'),
  5.      'User'=>array('name'=>'username''_on'=>'Blog.user_id=User.id'),
  6.    );
  7. }
我们来解释一下定义的格式代表了什么。
$viewFields属性表示视图模型包含的字段,每个元素定义了某个数据表或者模型的字段。
例如:
  1. 'Blog'=>array('id','name','title');
表示BlogView视图模型要包含Blog模型中的id、name和title字段属性,这个其实很容易理解,就和数据库的视图要包含某个数据表的字段一样。而Blog相当于是给Blog模型对应的数据表定义了一个别名。
默认情况下会根据定义的名称自动获取表名,如果希望指定数据表,可以使用:
  1. '_table'=>"test_db.test_table"
如果希望给当前数据表定义另外的别名,可以使用
  1. '_as'=>'myBlog'
BlogView视图模式除了包含Blog模型之外,还包含了Category和User模型,下面的定义:
  1. 'Category'=>array('title'=>'category_name');
和上面类似,表示BlogView视图模型还要包含Category模型的title字段,因为视图模型里面已经存在了一个title字段,所以我们通过
  1. 'title'=>'category_name'
把Category模型的title字段映射为category_name字段,如果有多个字段,可以使用同样的方式添加。可以通过_on来给视图模型定义关联查询条件,例如:
  1. '_on'=>'Blog.category_id=Category.id'
理解之后,User模型的定义方式同样也就很容易理解了。
  1. Blog.categoryId=Category.id AND Blog.userId=User.id
最后,我们把视图模型的定义翻译成SQL语句就更加容易理解视图模型的原理了。假设我们不带任何其他条件查询全部的字段,那么查询的SQL语句就是
  1. Select 
  2. Blog.id as id,
  3. Blog.name as name,
  4. Blog.title as title,
  5. Category.title as category_name,
  6. User.name as username 
  7. from think_blog Blog JOIN think_category Category JOIN think_user User 
  8. where Blog.category_id=Category.id AND Blog.user_id=User.id
111
通过"_type"设置JOIN类型的类型。"_as"指定表的别名。"_on"指定关联筛选的字段。 本文属追太阳原创文章,转载请声明出处:http://www.zhuitaiyang.com/html/2013/thinkphp_1118/544.html逐日者_追太阳

相关热词搜索:thinkphp 数据库 视图模型

上一篇:第一页
下一篇:Thinkphp(3.2.3) behavior行为调用详细示例

收藏
回到顶部