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() 使用详解相关推荐

  1. ThinkPHP 模型方法 setInc() 和 setDec()

    TP 内置了对统计数据(数字字段)的更新方法: setInc():将数字字段值增加 setDec():将数字字段值减少 setInc() ThinkPHP setInc() 方法将数字字段值增加. 1 ...

  2. 计算机辅助药物设计的一般原理,朱瑞新着--_计算机辅助药物设计(Ⅰ)--基本方法原理概要与实践详解.pdf...

    文档介绍: 计算机辅助药物设计 ------ 基本方法原理概要与实践详解作者朱瑞新 2011 年 1 月目录序前言第一章"计算机辅助药物设计"与 M OE 概貌一.导言二.&quo ...

  3. Tribon模型数据抽取之sx700.exe详解

    Tribon模型数据抽取之sx700.exe详解 一:简介 网络上关于Tribon模型数据抽取的论文最早流传的是2006哈尔滨工程大学姚竞争的工学硕士学位论文<TRIBON模型的数据抽取及二次开 ...

  4. hp打印机没有右键扫描_安装HP打印机报错 0x000006be解决方法,图文操作步骤详解...

    安装HP打印机报错 0x000006be解决方法,图文操作步骤详解 1. 首先打开控制面板 2.在程序和功能窗口中找是否有HP的打印机驱动,卸载掉 3.打开C:WindowsSystem32spool ...

  5. java8 方法引用详解_Java8中如何通过方法引用获取属性名详解

    前言 在我们开发过程中常常有一个需求,就是要知道实体类中Getter方法对应的属性名称(Field Name),例如实体类属性到数据库字段的映射,我们常常是硬编码指定 属性名,这种硬编码有两个缺点. ...

  6. 三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解

    三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解 本次以FX3U系列PLC的模拟量输入模块FX3U-4AD进行举例说明:  该模块的部分技术数据如下图所示,  该模块的接线端子排列 ...

  7. python中docx模块的使用_python使用docx模块读写docx文件的方法与docx模块常用方法详解...

    一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...

  8. 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记

    01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...

  9. 【Android语音合成TTS】百度语音接入方法,和使用技巧详解

    请尊重他人的劳动成果,转载请注明出处:[Android语音合成TTS]百度语音接入方法,和使用技巧详解 Ps. 依托于百度开放云,百度语音为合作伙伴提供了业界领先.永久免费的语音技术服务,目前已上线的 ...

最新文章

  1. sqlalchemy中的first_or_404()和get_or_404()使用(前端页面可视化操作——查询和添加)
  2. 看完陈皓的116篇文章,我给自己定了个5年技术规划
  3. 从模板方法模式到JDBCTemplate
  4. 模块化与nodeJs
  5. JavaScript深拷贝—我遇到的应用场景
  6. 【Spark Summit East 2017】BigDL:Spark上的分布式深度学习库
  7. 重构手法——提炼函数、搬移函数、以多态取代条件表达式
  8. T-SQL MAX Functions
  9. AVIator -- Bypass AV tool
  10. STM32H7+LAN8720A之ETH与LWIP配置问题(End)
  11. windows进程 windows多进程编程
  12. 福布斯发布区块链50强 这5家中国公司上榜
  13. python解析_第107天: Python 解析 PDF
  14. node爬取守望先锋图片
  15. 22.12.1打卡 漫步校园 记忆化搜索
  16. LK32T102单片机 操作GPIO实现 主按钮、矩阵按键 和 蜂鸣器
  17. 七代处理器装win7_7代cpu能装win7旗舰版吗?七代处理器 不能装win7的解决方法
  18. 3招搞定APP注册作弊
  19. 建议收藏 | 数据化、信息化、数字化、智能化到底都是指什么?彼此有什么联系?
  20. 智能物联网网关有哪些必备功能

热门文章

  1. 【电子量产工具】6. 业务系统
  2. 订阅w3c组织邮件列表申请方法
  3. 常见的API接口漏洞总结
  4. 剑指Offer46——把数字翻译成字符串
  5. Unreal Engine 4 动画系统介绍
  6. Nginx配置详解笔记
  7. mysql federated 插件,通过mysql的federated插件实现dblink功能
  8. JS(ES5)正则表达式(多个前瞻存在情况)进行密码匹配
  9. jenkins钉钉通知
  10. java开发中推荐的防御sql注入方法_防御SQL注入的方法总结