很多TP的新手对于模型中的视图模型不甚了解,官方虽然有详细手册,但是对于初学者来说还是比较难以理解!

  先简单说一下视图模型所能实现的功能,基本就是主表与副表之间各个字段的关联问题,实现多表关联查询,相对于使用原生SQL语句来说,着实是简单不少.

  首先在数据表初始化的时候,用的不是传统的M('User'),在视图模型中使用的是D('UserView'),如下图:

  

  需要主要的是几个单词的首字母大写.

  之后在Lib/Model目录中新建名为XXXViewModel.class.php(XXX为任意控制器名/首字母大写).里面的内容格式如下图:

  

  推荐所有的数组后面都加上'_type'=>'LEFT'.因为当所关联的表的数据为空时,系统会报错.

  首先主表就是customer数组中填写的则是需要查询出来的字段,其中里面的p_id和b_id则是他所关联的表设置的别名,其实类似于原生SQL里面的LeftJoin语句的感觉.

  

  上图所示,'_table'写的是你需要关联的表名,值得注意的是表名需要写全称,包括它的前缀.

  '_as'则是你要给他取的别名,'name'则是你之后在进行CURD操作的时候所用的字段,

  '_on'执行关联操作:主表.所关联的ID=副表(使用的是别名).主键ID,当他们相等的时候,也就实现了主表某个字段与副表的某条数据进行关联了,最后惊醒Select操作就是把关联的内容展现出来了.

  当然这个一般用来处理过于繁杂的表数据关联,比如说一个主表关联十几个副表,这个时候用到视图模型你就会觉得省心了.

  这只是一个基本功能的简单例子,基本就讲解到这里.希望可以帮助到一些TP的新手.

ThinkPHP中视图模型详解.的更多相关文章

  1. ThinkPHP中Session用法详解

    在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有: Session::set(name, value):注册 session . Session::is_set(name):检 ...

  2. django中的模型详解-1

    在说明django模型之前,首先来说明一下django的生命周期,也就是一个请求到达django是如何处理的.[暂时不包含中间件] 浏览器的请求---->到达django中的urls中找到对应的 ...

  3. Odoo中的模型详解

     转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826118.html   [Odoo中,一切皆模型,连视图都是模型.Odoo将各种数据,如:权限数据.类 ...

  4. ThinkPHP视图查询详解

    ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm   这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下     ThinkP ...

  5. ThinkPHP关联模型详解

    在ThinkPHP中,关联模型更类似一种mysql中的外键约束,但是外键约束更加安全,缺点却是在写sql语句的时候不方便,ThinkPHP很好得解决了这个问题.但是很多人不动关联模型的意思.现在就写个 ...

  6. 「翻译」Unity中的AssetBundle详解(一)

    AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...

  7. ASP.NET Core的配置(2):配置模型详解

    在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...

  8. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  9. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

随机推荐

  1. CSS3选择器使用小结

    CSS3 选择器小结 一 通用选择器 1  *{}通配选择符(CSS2):适合所有元素对象. 2  E类型(HTML)选择符(CSS1):以文档语言对象类型DOM作为选择符. 3  E#myid是id ...

  2. http请求方法与响应状态码

    请求方法:GET POST HEAD PUT DELETE OPTIONS常用的方法是:GET POST GET提交可以在浏览器地址栏看到提交的信息 POST提交方式不显示在地址栏,相对于GET方式较 ...

  3. content = "IE=edge,chrome=1" 详解

    content = "IE=edge,chrome=1" 详解 < meta http-equiv = "X-UA-Compatible" content ...

  4. Fluent Validation For .NET

    //.net 中数据验证,一个开源的项目,直接下载 1 using FluentValidation; public class CustomerValidator: AbstractValidato ...

  5. mybatis 无法转换为内部表示 解决

    出现这个问题,一般是JavaBean定义的时候数据类型不准造成的. 其中javabean定义的字段的类型并不需要完全和数据库中的字段一样. 在mapper.xml中可能做了转换  比如 CASE WH ...

  6. 20个linux命令行工具监视性能(上)

    对于每一个系统管理员或网络管理员每天监视或调试linux系统的性能问题是一件非常困难的事,在it行业作为一个linux管理员五年之后,我开始知道监视和保持系统启动和运行有多么的困难.由于这个原因,我们 ...

  7. 捕获JSON 解析错误

    $json = <<<JSON { "origin":"Delhi", "destination":"Londo ...

  8. 轮子来袭 vJine.Core Orm 之 03_架构分析

    1.vJine.Core ORM 架构: 如上图所示,vJine.Core ORM的特点如下: 所有操作均以DataManager为核心: DataManager业务部分的增删改查操作依赖于Class ...

  9. gradle使用国内源

    // 设置 maven 库地址 repositories {     maven { url 'http://maven.oschina.net/content/groups/public/' } } ...

  10. Java中的String类

    /*String类用于描述字符串事物的那么它就提供了多个方法对字符串进行操作 方法都会用,字符串这块就结束了常见的操作有哪些?“abcd”它应该具备什么功能,我们才能更好得操作它?1.获取(必须要掌握 ...