很多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. Apache Mesos总体架构

    http://developer.51cto.com/art/201401/426507.htm 1. 前言 同其他大部分分布式系统一样,Apache Mesos为了简化设计,也是采用了master/ ...

  2. sql server 2008 r2 清除数据库日志

    USE [master] GO ALTER DATABASE [数据库名] SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE [数据库名] SET ...

  3. .net 文件操作

    一.DotNet文件目录常用操作: DiveInfo:提供了对逻辑磁盘的基本信息访问的途径.(只能查看信息,不能做任何修改.) System.Environment:用来枚举驱动器.(不能获取驱动器的 ...

  4. oracle 12 C启动问题

    启动时出现以下报错信息: SQL> startup; ORA-48146: missing read, write, or exec permission on directory during ...

  5. Spring MVC中Ajax实现二级联动

    今天写项目遇到了二级联动,期间遇到点问题,写个博客记录一下. 后台Controller: @RequestMapping("/faultType") @ResponseBody p ...

  6. centos6.3安装openvpn客户端

    centos6.3安装openvpn客户端 Centos 默认是没有提供Openvpn的,而且在yum 的源里面也没有openvpn ,如果想使用yum安装的话要首先安装EPEL这个东西.www.2c ...

  7. CentOS下Apache+SVN+LDAP的安装与配置

    上班接近4个月了,在公司做配置管理工程师,主要是在Linux下对公司的源代码以及项目发布进行管理.4个月接触了好多新知识,也对各种工具的集成使用搞得云里来雾里去的,所以打算自己搭建一套环境,进行测试. ...

  8. C# IO操作磁盘上的txt

    using System.IO; //写入并导出到磁盘 StreamWriter sw = new StreamWriter(@"H:\text.txt"); sw.WriteLi ...

  9. C# 多线程基础

    多线程 无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其 他工作.要使应用程序能够快速响应用户操作,同时在用户 ...

  10. H5发展简介

    HTML4.01 超文本标记语言,1999年12月24日由W3C组织发布. XHTML 扩展的超文本标记语言(eXtensible Hyper Text Markup Language),和HTML4 ...