php视图查询的优势,ThinkPHP视图查询详解

搜索热词

ThinkPHP提供的视图查询应用功能十分强大,用户利用视图查询功能可以将多个数据表的字段内容按需要进行指定和筛选,组织成一个基于这些数据表的视图模型,然后就可以通过该模型直接进行多表联合查询,非常方便和简单。

例如在项目中,我们定义有三个表:

user 用户基础表,

user_info 用户详细信息表,

dept 部门分类表

现在我们需要获取某个用户信息,

该信息要包括用户的帐号名称和相关资料与及所在部门的名称,

这时候我们可以利用视图查询进行处理。

下面举例加以说明:

1.构建一个新项目并进行相关配置(可参考前面的教程,这里省略)

2.创建一个数据库tpview,并添加这三个表

(1) 用户表

sql;">

CREATE TABLE `think_user` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID编号',`name` varchar(20) NOT NULL COMMENT '帐户',`password` varchar(32) NOT NULL COMMENT '密码',`dept_id` smallint(6) unsigned NOT NULL,`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '开放状态',PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='会员表' AUTO_INCREMENT=2 ;

INSERT INTO `think_user` (`id`,`name`,`password`,`dept_id`,`status`) VALUES

(1,'zzguo28','123456',2,1);

(2)用户信息表

sql;">

CREATE TABLE `think_user_info` (

`user_id` int(11) NOT NULL COMMENT '用户id',`nick_name` varchar(30) NOT NULL COMMENT '用户昵称',`email` varchar(100) NOT NULL COMMENT '邮箱地址',`address` varchar(100) NOT NULL COMMENT '详细地址',`gender` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性别',`mobile` varchar(100) NOT NULL COMMENT '手机号码',`telephone` varchar(100) NOT NULL COMMENT '电话号码',KEY `user_id` (`user_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户信息表';

INSERT INTO `think_user_info` (`user_id`,`nick_name`,`email`,`address`,`gender`,`mobile`,`telephone`) VALUES

(1,'国','zzguo28@163.com','TP路think街1.6号',1,'12345678901','123456');

(3) 部门分类表

sql;">

CREATE TABLE `think_dept` (

`id` smallint(3) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `think_dept` (`id`,`name`) VALUES

(1,'开发部'),(2,'销售部'),(3,'财务部');

3.在项目/Lib/Model下创建这三个表的基础模型Model

本示例没涉及到验证等其它功能,所以只要简单定义测可,例如

PHP;">

其实视图模型对应的数据表并非一定要有相应的的基础模型,但是建议您创建,这样单表和视图都可以操作。

4.创建视图模型,代码如下,详细注解见其后:

(附注:最新svn上已增加动态扩展模型功能,使用新版需要将protected属性改为public属性,建议使用动态扩展功能去使用视图查询,而不再是本教程的继承方式。那样使用会更灵活。)

PHP;">

array('id','name','_as'=>'u','_type'=>'left'),'UserInfo' =>array('email','mobile','_as'=>'ui','_on'=>'ui.user_id=u.id'),'Dept' =>array('name'=>'dept','_on'=>'u.dept_id=Dept.id'),);

}

?>

对上述代码解释如下:

在第2行代码中,由于自TP1.6版开始已将视图查询分离出原Model类,因此这里需要使用import方法引入了视图模型类。

第3行代码中,定义了该模型名称为Userviewmodel,视图模型的名称Model前的命名是随意的,只是为了有别于其它模型,通常我们会以xxxviewmodel这样的方式去命名。并且一定要继承viewmodel。(ThinkPHP1.6版无需再设置模型的viewmodel属性为true,只要继承viewmodel则可)

第4行代码$viewFields 属性表示视图模型包含的字段,每个元素定义了各个数据表或者模型所需的字段。

格式是

array('所需字段','_as'=>'别名定义','_on'=>'筛选条件','_type'=>'指定join类型,支持right,inner,left三种'),);

注意到第7行代码中的'name'=>'dept',因为User模型里面已经存在了一个name字段,所以我们通过这种方式把Dept模型的name字段映射为dept字段,如果有多个字段,可以使用同样的方式添加。

定义完毕后,我们在Action中进行测试,代码如下

PHP;">

where($where)->find());

dump($dao->getLastsql());

}

}

?>

然后访问该操作,可以看到我们成功取得所需的查询内容:

array(5) {

["id"] => string(1) "1"

["name"] => string(7) "zzguo28"

["email"] => string(17) "zzguo28@163.com"

["mobile"] => string(11) "12345678901"

["dept"] => string(9) "销售部"

}

}

并可以看到使用的sql如下

sql;">

"SELECT u.id AS id,u.name AS name,ui.email AS email,ui.mobile AS mobile,Dept.name AS dept FROM think_user u LEFT JOIN think_user_info ui ON ui.user_id=u.id JOIN think_dept Dept ON u.dept_id=Dept.id WHERE ( u.id = 1 ) LIMIT 1 "

视图模型在查询上和普通单表并没有多大分别,可以使用我们所熟悉的各种连贯操作,例如order,limit等等。

总结

以上是编程之家为你收集整理的ThinkPHP视图查询详解全部内容,希望文章能够帮你解决ThinkPHP视图查询详解所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

首次揭秘云原生Hologres存储引擎

简介: 本文将会首次对外公开介绍Hologres的存储引擎,深度剖析其实现原理和核心技术优势。 概要:刚刚结束的2020天猫双11中,MaxCompute交互式分析(Hologres)实时计算Flink搭建的云原生实时数仓首次在核心数…

什么是 “原型模式” ?

作者:东风玖哥,小灰来源:程序员小灰————— 第二天 —————————————————假如有一天,小灰被外星人抓走了,外星人要拿小灰做实验,想了解小灰在吃得好、睡得好、玩得开心的场景下&#xf…

制造业全链数字化业务转型实践

近日,阿里云Lindorm与Intel、OSIsoft推出了面向工业物联网信息经济(Infonomics)的IT & OT超融合工业数据云解决方案。方案通过云端打通阿里云、Intel的IT技术积累和OSIsoft的OT经验能力,实现对传统技术供需关系的超越&#xf…

matlab 控制声卡,请问高手关于matlab控制声卡输出的问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼请问高手,怎么我采样之后经声卡输出在示波器里看到的波形和采样滤波后的信号不一样呢?请高手帮忙不知道怎么把采样滤波后的信号原样输出来,谢谢。程序输出部分有问题吗?ai analoginp…

从搜索引擎到核心交易数据库,详解阿里云神龙如何支撑双11

简介: 订单峰值58.3万笔/秒,销售额4982亿,阿里云神龙再次成功扛住了全球流量洪峰 2020年的双11,天猫又创造了新的纪录:订单峰值达到创纪录的58.3万笔/秒,销售额达到历史新高4982亿,阿里云神龙再…

云网一体,“湘遇湘融 | 移动云TeaTalk·长沙站 启动倒计时

在企业数字化转型、云服务和国家政策等多重因素驱动下,越来越多的企业、行业和政府机关将业务迁移到云上,单一化的网络连接模式已经不能满足企业“多系统、多场景、多业务”的上云需求,而是要求云和多样化网能力高度协同。中国移动作为运营商…

matlab save txt 乱码,matlab代码或中文复制到word就变成乱码怎么办?

在matlab的edit中编辑的脚本程序复制到word时,注释里面的汉字变为乱码怎么办。下面教你两种解决办法。软件名称:Matlab 7.0.1 R14 SP1 (3CD带序列号)免费版软件大小:1.17GB更新时间:2012-11-03立即下载1、这是我在matlab的edit下面…

EMAS 移动 DevOps 解决方案 —— Mobile DevOps

简介: DevOps这一优秀的软件交付理念在服务端已经有很多相关的实践,那么是否也可以应用到移动端进行交付呢?基于移动端和服务端场景的差异,移动DevOps跟服务端DevOps又有哪些不同和挑战?本文分享阿里云云原生应用研发平…

MongoDB 5.0 来了,原生时序、版本化 API 新特性悉数登场

作者 | 伍杏玲出品 | CSDN云计算(ID:CSDNcloud)据 DB-Engines 数据库最新 7 月流行度排行榜显示,前五名十分稳定:Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDB,其中 MongoDB 是唯一的文档型数…

阿里云Lindorm与Intel、OSIsoft共建IT OT超融合工业数据云

近日,阿里云Lindorm与Intel、OSIsoft推出了面向工业物联网信息经济(Infonomics)的IT & OT超融合工业数据云解决方案。方案通过云端打通阿里云、Intel的IT技术积累和OSIsoft的OT经验能力,实现对传统技术供需关系的超越&#xf…

wamp php5.6 mysql5.6,WampServer 3.0.6 多语言版 集成apache2.4.23 mysql5.7.14 php5.6.25-7.0.10 穿墙书店...

WampServer是一款由法国人开发的Apache Web服务器、PHP解释器以及MySQL数据库的整合软件包,就是Windows Apache Mysql PHP集成安装环境,即在window下的apache、php和mysql的服务器软件。免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去…

阿里云数据中台助力零售耐消品新客获取与转化

天猫消电家装联合安永战略咨询基于阿里巴巴品牌数据银行AIPL的资产积累与流转情况,设计了数字化新客运营指标体系NEW。 这一体系以消费者资产作为品牌方经营的运营基石,基于消费者人群的评估、监测、驱动来带动品牌当下及未来商业的增长。关于NEW这一指…

字节大数据手册火了 ! 离线数据/实时数据/数据仓库ETL/实时交易系统/啥都有 !...

最近有幸在一位字节跳动大数据高级工程师手里扒到了这份学习笔记,将部分知识章节发布到了在B站上竟然获得了5000点赞!本来想将文件上传到github上,但由于文件太大有的都无法显示所以直接整理成多个文件夹,供大家学习,也…

专访阿里云 Serverless 负责人:无服务器不会让后端失业

2012 年,云基础设施服务提供商 Iron.io 的副总裁 Ken 谈到软件开发行业的未来,首次提出了 Serverless 的概念,为云中运行的应用程序描述了一种全新的系统体系架构。此后,以 AWS 为代表的云服务厂商将 Serverless 概念逐步落地&…

php模糊搜索慢怎么办,MySQL中文模糊检索问题的解决方法_php

mysql中文模糊检索问题的解决方法来源:林兴陆在 MySQL 下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找 "-0x1.ebea4bfbffaacp-4%" 时,返回的可能有中文字符,却没有 a 字符存在。…

消息队列RocketMQ性能测试案例

1. 消息队列RocketMQ性能测试案例 1.1 RocketMQ测试分析 客户场景,信息共享交换平台: 1.交换平台需支持每秒万级别数据传输 2.实现跨路段、跨部门、跨行业、跨区域信息即时共享,做到高可靠、低延迟 客户现场展示场景设计思路: 1…

揭秘百度微服务监控:百度游戏服务监控的演进

导读:臣闻防患于未然者易,除患于已然者难 —— 明马文升《添风宪以抚流民疏》作为一个程序员,是否有留意到每逢节假日在各大景区时有程序员打开电脑紧急处理线上问题?如果线上出现大量的报警,这时我们该如何判断是自身…

「更高更快更稳」,看阿里巴巴如何修炼容器服务「内外功」

作者 | 守辰、志敏来源|阿里巴巴云原生公众号 11 月 11 日零点刚过 26 秒,阿里云再一次抗住了全球最大的流量洪峰。今年 双11 是阿里经济体核心系统全面云原生化的一年,相比去年核心系统的上云,云原生化不仅让阿里享受到了云计算技术成本优化…

java事务超时时间,java – 如何在WebSphere Liberty Batch中配置事务超时?

> javax.transaction.global.timeout的作用是什么?>我是否需要在CheckpointAlgorithm中实现checkpointTimeout()方法?>服务器配置级别有什么问题吗?这与应用程序级别设置的内容如何交互?解决方法:(编辑2016-12-02&#x…

云原生应用架构转型不好做?阿里云这个平台让你一步到位!

云原生实践带来的挑战 阿里云云原生为企业提供了完善的容器服务、函数计算、微服务体系、中间件体系。每个服务都有伸缩性、弹性和组合性,通过产品选择或组合搭建,能轻松完成应用与运行环境解耦,和传统应用研发模式具有较大差异。从传统研发…