ThinkPHP 模型方法 setInc() 和 setDec() 使用详解
1、功能:字段的值的自增、自减与延时更新
1.自增自减针对可计算的字段类型:数值型和日期时间型;
2.如对字符型字段自增,将会将该字段强行更新为自增值,如:1;
3.自增自减操作的条件,必须在该方法之前设置。
2、源码:/thinkphp/library/think/Query.php
下面仅以:setInc方法为例展示:
源码显示:没有更新条件时,该方法拒绝执行,确保数据安全
3、参数与返回值:
该方法可接受三个参数:
序号 名称 类型
参数1 字段名称 数值或日期时间型
参数2 步长值 整形,默认为1,可为负值
参数3 延时秒数 整形,必须正值
返回值:受影响的记录数量。
4、实例演示(以setInc自增为例):
任务1:[单记录自增]
将tp5_staff表中id=1010的员工年龄加10;
1.先查看一下id = 1010 员工的当前age年龄字段的值
<?php
namespace app\index\controller;
use think\Db;
class Index {public function index(){//查询id=1010的记录dump(Db::table('tp5_staff')->find(1010)); }
}
2.结果如下
array(7) {["id"] => int(1010)["name"] => string(9) "欧阳峰"["sex"] => int(1)["age"] => int(18) // 年龄为 18 岁["salary"] => float(4900)["dept"] => int(2)["hiredate"] => string(10) "2013-09-22"
}
3.Index.php 控制器代码如下:
<?php
namespace app\index\controller;
use think\Db;
class Index {public function index(){//1.更新id=1010的记录,将age 字段 加 10Db::table('tp5_staff') -> where('id',1010) -> setInc('age',10);//查询id=1010的记录dump(Db::table('tp5_staff')->find(1010)); }
}
4、再次查看id=1010的记录,检查是否更新成功
array(7) {["id"] => int(1010)["name"] => string(9) "欧阳峰"["sex"] => int(1)["age"] => int(28) //之前为18,现在已更新为28,自增成功["salary"] => float(4900)["dept"] => int(2)["hiredate"] => string(10) "2013-09-22"
}
任务2:[多记录自增]
将tp5_staff表中id=1005到1007三条记录的员工入职日期减3天(负值实现);
先查看未更新前的三个员工的入职日期
Index.php 控制器代码:
<?php
namespace app\index\controller;use think\Db;class Index {public function index(){ // 1.将入职日期提前三天Db::table('tp5_staff') -> where('id','between','1005,1007') -> setInc('hiredate',-3); // 2.查看更新结果 dump(Db::table('tp5_staff')->where('id','between','1005,1007')->select()); }
}
运行结果:
array(3) {[0] => array(7) {["id"] => int(1005)["name"] => string(6) "武松"["sex"] => int(0)["age"] => int(19)["salary"] => float(2400)["dept"] => int(3)["hiredate"] => string(10) "2010-07-18" //由2010-07-21变成2010-07-18}[1] => array(7) {["id"] => int(1006)["name"] => string(9) "西门庆"["sex"] => int(0)["age"] => int(90)["salary"] => float(19801)["dept"] => int(2)["hiredate"] => string(10) "2015-12-28" //由2015-12-31变成2015-12-28}[2] => array(7) {["id"] => int(1007)["name"] => string(9) "潘金莲"["sex"] => int(0)["age"] => int(39)["salary"] => float(8567)["dept"] => int(3)["hiredate"] => string(10) "2016-03-17" //由2016-03-20变成2016-03-17}
}
此时,表中数据也变更为:
5、总结:
1.我们仅以setInc方法举例,setDec方法与之类似,不再举例;
2.通过设置自增自减步长值的正负值,这二个方法完全可以互换,上例中已体现;
3.该方法在大量数据自增自减时,效率很高,推荐使用;
4.延时更新不便演示,同学们完成可以自己完成。
6、db助手函数
db助手函数仅仅是简化了数据表的选择,其它地方都完全一样,请同学们课后自己完成,下面为例子,请仿照改写:
<?php
namespace app\index\controller;
use think\Db;
class Index {public function index(){//1.更新id=1010的记录,将age 字段 加 10db('staff') -> where('id',1010) -> setInc('age',10);//查询id=1010的记录dump(db('staff')->find(1010)); }
}
注:本文转自php中文网
ThinkPHP 模型方法 setInc() 和 setDec() 使用详解相关推荐
- ThinkPHP 模型方法 setInc() 和 setDec()
TP 内置了对统计数据(数字字段)的更新方法: setInc():将数字字段值增加 setDec():将数字字段值减少 setInc() ThinkPHP setInc() 方法将数字字段值增加. 1 ...
- 计算机辅助药物设计的一般原理,朱瑞新着--_计算机辅助药物设计(Ⅰ)--基本方法原理概要与实践详解.pdf...
文档介绍: 计算机辅助药物设计 ------ 基本方法原理概要与实践详解作者朱瑞新 2011 年 1 月目录序前言第一章"计算机辅助药物设计"与 M OE 概貌一.导言二.&quo ...
- Tribon模型数据抽取之sx700.exe详解
Tribon模型数据抽取之sx700.exe详解 一:简介 网络上关于Tribon模型数据抽取的论文最早流传的是2006哈尔滨工程大学姚竞争的工学硕士学位论文<TRIBON模型的数据抽取及二次开 ...
- hp打印机没有右键扫描_安装HP打印机报错 0x000006be解决方法,图文操作步骤详解...
安装HP打印机报错 0x000006be解决方法,图文操作步骤详解 1. 首先打开控制面板 2.在程序和功能窗口中找是否有HP的打印机驱动,卸载掉 3.打开C:WindowsSystem32spool ...
- java8 方法引用详解_Java8中如何通过方法引用获取属性名详解
前言 在我们开发过程中常常有一个需求,就是要知道实体类中Getter方法对应的属性名称(Field Name),例如实体类属性到数据库字段的映射,我们常常是硬编码指定 属性名,这种硬编码有两个缺点. ...
- 三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解
三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解 本次以FX3U系列PLC的模拟量输入模块FX3U-4AD进行举例说明: 该模块的部分技术数据如下图所示, 该模块的接线端子排列 ...
- python中docx模块的使用_python使用docx模块读写docx文件的方法与docx模块常用方法详解...
一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...
- 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记
01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...
- 【Android语音合成TTS】百度语音接入方法,和使用技巧详解
请尊重他人的劳动成果,转载请注明出处:[Android语音合成TTS]百度语音接入方法,和使用技巧详解 Ps. 依托于百度开放云,百度语音为合作伙伴提供了业界领先.永久免费的语音技术服务,目前已上线的 ...
最新文章
- sqlalchemy中的first_or_404()和get_or_404()使用(前端页面可视化操作——查询和添加)
- 看完陈皓的116篇文章,我给自己定了个5年技术规划
- 从模板方法模式到JDBCTemplate
- 模块化与nodeJs
- JavaScript深拷贝—我遇到的应用场景
- 【Spark Summit East 2017】BigDL:Spark上的分布式深度学习库
- 重构手法——提炼函数、搬移函数、以多态取代条件表达式
- T-SQL MAX Functions
- AVIator -- Bypass AV tool
- STM32H7+LAN8720A之ETH与LWIP配置问题(End)
- windows进程 windows多进程编程
- 福布斯发布区块链50强 这5家中国公司上榜
- python解析_第107天: Python 解析 PDF
- node爬取守望先锋图片
- 22.12.1打卡 漫步校园 记忆化搜索
- LK32T102单片机 操作GPIO实现 主按钮、矩阵按键 和 蜂鸣器
- 七代处理器装win7_7代cpu能装win7旗舰版吗?七代处理器 不能装win7的解决方法
- 3招搞定APP注册作弊
- 建议收藏 | 数据化、信息化、数字化、智能化到底都是指什么?彼此有什么联系?
- 智能物联网网关有哪些必备功能