一、CRUD

ThinkPHP提供了灵活和方便的数据库操作方法,其中最基本的就是CRUD四个操作,只有掌握了最基本的CRUD操作,才能更好的运用更多实用的数据库操作方法

CRUD操作通常与连贯操作配合

1、创建操作

使用add()方法或addAll()方法

·add()方法

可以直接传入要插入的数据,而且会在插入之前会过滤掉数据表中不存在的字段以及非法的数据类型(例如对象、数组等非标量数据)。若当前表有主键自动增长并且插入记录成功的话,则返回所插入记录主键值

如果在执行add()操作之前已经创建了数据对象(通过create()方法或data()方法),则add()中可以不传值

·addAll()方法

addAll()方法可以实现批量插入数据

2、读取操作

在ThinkPHP中通常分为读取字段(值,单一值)、读取记录(一维数组,单条记录)和读取记录集(二维数组,多条记录)

·读取字段(值,单一值)

getField()方法

读取某一条记录的某一个字段返回的才是单一值

读取某一条记录的多个字段返回的是一个一维关联数组(键为第一个字段值,值为其余字段值)(之所以说其余,是因为其余字段并非只有一个,若其余字段不止一个,则值用一个空格隔开)。ps,如果第一个字段值为数字样式(不管是int,还是char),形成的是索引数组(虽然在PHP中,索引数组与关联数组并没有本质上区别)!

·读取记录(一维数组,单条记录)

find()方法,最多返回一条记录,即使符合条件的记录有多条,也仅仅返回一条,所以limit()方法对于find()查询是无效的

·读取记录集(二维数组、多条记录)

select()方法或findAll()方法

3、更新操作

ThinkPHP主要使用save()方法完成更新操作,还有setField()、setInc()、setDec()方法

·save()方法

对于save()方法,如果没有where方法()指定更新条件或者数据对象(或者是直接传入的数组)不包含主键字段,则save()方法是不会执行更新操作的。目的是为了保证数据库的安装,避免错误更新表中的所有记录!类似于add()方法,如果在调用该方法之前已经创建了数据对象(通过create()或data()方法),则可以不传值

返回值为受影响的行数,是int类型

·setField()方法

如果只更新某个字段,则也(为什么说也,是因为save()方法也可以更新某一个字段)可以使用setField()方法。当然setField()方法也是可以更新多个字段的,此时传递数组参数即可

setField(参数1,参数2); 参数1表示字段名称,参数2表示将要更新成的值。如果参数1是元素值为各个字段的数组,则参数2也必须是元素值为各个字段相对应值的数组,而且参数1有几个元素,参数2就必须相应的有几个元素,这里必须严格对应,否则会出现很多意想不到的情况

·setInc()方法

只用于数字类型的字段,setInc(参数1,参数2,参数3); 参数1表示要更新的字段,参数2表示where条件,参数3表示增加的数值(参数3省略则表示增加1)

·setDec()方法

只用于数字类型的字段,setDec(参数1,参数2,参数3); 参数1表示要更新的字段,参数2表示where条件,参数3表示减少的数值(参数3省略则表示减少1)

4、删除操作

delete()方法,用于删除记录,取决于where()方法中定义的条件,同时也可以用order()方法和limit()方法来限制删除的记录数

二、连贯操作

ThinkPHP2.0全面启用连贯操作方法,可以有效提高数据存取的代码清晰度和开发效率。连贯操作适用于CRUD操作,并不是只使用与R操作

所有的连贯操作都只有一个参数,而且连贯操作的参数只在当前操作中有效,操作完成后自动清空连贯操作的所有传值。简而言之,连贯操作的结果不会带入以后的查询

举个例子,查看User表中满足密码为123456的前3条记录,并且按照id进行排序

在连贯操作中,除了select()方法必须放在最后之外,其余方法的顺序可随意。注意,这点与MySQL原生的sql语句要区别开,MySQL原生的sql语句的各子语句是有严格的先后顺序关系的,所以一下写法与上面写法等效!

补充,ThinkPHP不仅仅支持连贯操作,还支持直接使用参数进行查询,比如说将上述连贯操作的代码改成如下形式。使用数组参数的方式的话,数组的键是连贯操作的方法名,值是连贯操作的参数

1、where()方法

用于查询、更新、删除操作中条件的定义,相当于原生sql语句中的where子句

参数支持String、Aarry和Object类型

2、table()方法

用于定义要操作数据表的名称。也就是说,如果想通过某模型对象操作非该模型对象对应的表或者说操作多张表,则可使用该方法定义想要操作的数据表

注意,表名必须是带前缀的完整表名,可以使用别名

参数支持String和Array类型(Array类型用于给表起别名,键是原名,值是别名。若不指定值,则不起别名)    强调一下,String类型也可以给表起别名的

3、data()方法

用于向模型对象中传递数据,然后再进行创建、更新和删除操作

注意与create()方法区别开,之前探讨过两者之间的区别

4、field()方法

用于查询操作中所查询字段的定义

参数支持String和Aarry类型(Array类型用于给字段起别名,键是原名,值是别名。若不指定值,则不起别名)  强调一下,String类型也是可以给字段起别名的

5、order()方法

用于结果排序

支持多个字段排序

参数支持String和Array类型(Array类型,键是字段名,值是排序规则。若不指定值,则默认是升序)

6、limit()方法

用于结果限制

实际上,对于不同的数据库,limit子句的语法是不尽相同的,但是ThinkPHP在底层已经为我们屏蔽了这个差异,所以不管是什么类型的数据库 ,都是使用统一的limit()方法

参数支持String

7、page()方法

用于查询分页

page(‘page,[listRows]‘); String类型的参数中,page表示当前为第page页,listRows表示每页多少条记录,如果listRows省略的话,则listRows取limit方法中所限制的记录条数

注意,一般很少使用该方法,而是使用分页类

8、group()方法

用于分组

参数只支持String类型

9、having()方法

用于分组后过滤

参数只支持String类型

10、join()方法

用于连接查询

注意,join()方法是连贯操作中唯一可以多次调用的方法

参数支持String和Array类型

而且在内部已经实现了重复字段的消除处理了的

11、distinct()方法

用于消除重复记录,即进行唯一性过滤

参数支持Bool类型

12、relation()方法

用于关联操作

13、lock()方法

用于数据库中的锁机制

lock(true)就会自动在生成的sql语句后面加上FOR UPDATE

ps,不难看出,以上这些方法,如果参数是String类型,则该参数就可以按照原生sql相对应的子句语法格式进行书写!如果参数是Array类型的,则要注意不同方法中,键与值的含义

原文:http://www.cnblogs.com/TigerYangWTH/p/5820528.html

php 如果记录集不存在,ThinkPHP教程_PHP框架之ThinkPHP(八)【CRUD与连贯操作】相关推荐

  1. Think PHP crud,ThinkPHP教程_PHP框架之ThinkPHP(八)【CRUD與連貫操作】

    一.CRUD ThinkPHP提供了靈活和方便的數據庫操作方法,其中最基本的就是CRUD四個操作,只有掌握了最基本的CRUD操作,才能更好的運用更多實用的數據庫操作方法 CRUD操作通常與連貫操作配合 ...

  2. odoo10参考系列--ORM API 一(记录集、环境、通用方法和创建模型)

    记录集 版本8.0中新东西: 这个在Odoo8.0中新加的API的页面文档应该是不断向前发展的主要开发API.同时它还提供了关于移植或桥接版本7和更早版本的"旧API"的信息,但没 ...

  3. 我想自学php但是网上视频很不连贯,ThinkPHP - 连贯操作

    /** * 连贯操作 * @return 无返回值 */ public function coherentOperation(){ //实例化模型 $user = M('User'); // +--- ...

  4. 关于flask入门教程-记录集转jsonify

    Flask 框架里,可以用 jsonify 返回 json 数据,但是为什么不用 Python 自带的 json 模块返回 JSON 数据呢? 其实两者是差不多的,jsonify指明了Content- ...

  5. Spring+mongodb集群集成(吐血教程) 转自:http://blog.csdn.net/qq_16497617/article/details/52817335

    前一篇文章中介绍了在window系统下部署mongodb集群,按照教程一步步实现的话应该都可以在本机部署成功了,上篇文章末尾也提到了,想集成到SSM框架中去,网上资料基本都是单个mongodb数据库的 ...

  6. SSIS中的记录集目标

    这一篇,我们来看看另外一个特殊的目标组件:记录集目标.它与DataReader目标有些类似,也是在内存中的.但与DataReader目标不同的是,它可以被下游任务使用. 它的使用也比较简单,我们一般指 ...

  7. ODBC更新记录集提示”记录集为只读“

    创建的ODBC应用程序默认的记录集不具有只读属性,但是再更新记录表时会提示"记录集为只读",这是为什么呢? 今天看书找到了答案: 因为MFC中的数据库类不支持需要连接两个或者多个表 ...

  8. 用.NET调用oracle的存储过程返回记录集

    最近做一个项目,为了提高数据库安全性,客户要求所有数据库操作都要放在存储过程.象一般的更新操作,返回一个值的,都比较容易实现.而要想返回记录集就比较麻烦,我在网上搜了一下,这方面的文章并不多.在此总结 ...

  9. 支付宝支付 第二集:傻瓜式教程->获取支付的RSA公钥和私钥

    支付宝支付 第二集:傻瓜式教程->获取支付的RSA公钥和私钥 一.步骤 点击文档 点击网页&移动应用 点击配置密钥 点击Web在线加密 先点击生成,再点击保存 返回沙箱的控制台,先点击沙 ...

最新文章

  1. 人脸扫描建模_人脸识别智能锁安全吗?
  2. 惠普搜客户机t5740升级硬盘_惠普暗影精灵5首测重磅来袭:更多选择 更强性能...
  3. Cookie、Session、Token、JWT区别与联系
  4. android 手势密码存储,Android 简易手势密码开源库详解
  5. GlassFish的使用方法
  6. 【MMDetection3D】环境搭建,使用PointPillers训练测试可视化KITTI数据集
  7. STM32MP157开发板调试笔记
  8. html中如何定义python变量,python怎么定义变量?如何给变量赋值?
  9. 国产ARM核心工控主板介绍
  10. 音乐精灵 - Bandari
  11. Java面向对象笔记 • 【第11章 Swing高级应用】
  12. 免费展示自己写的HTML给别人看
  13. 容器云时代,Commvault的变与不变
  14. java.有空值的对象序列化_java – 如何防止Map中的空值和bean中的空字段通过Jackson序列化...
  15. 路缘石成型机对着项目质量加强的方向努力
  16. Word中批量制作录取通知书amp;工资条
  17. 计算机校园网网络工程论文,【网络工程论文】网络工程研究及校园网设计
  18. C# 中的Tag属性
  19. 企业级负载均衡解决方案之二:美团点评四层负载均衡解决方案MGW
  20. 如何有效的使音频转换文字呢?

热门文章

  1. 记录IDEA导包不能导入的问题
  2. 这可能是我学习计算机以来的全部总结和收获
  3. 响铃:入局双11营销大战,搜狗翻译宝Pro的“新生活方式”宣言
  4. google的gson工具使用
  5. 创业是红海好还是蓝海好?
  6. cae分析_CAE有限元分析软件的比较
  7. 获取平均评分最高的10部电影
  8. 什么是HomeAssistant(一)
  9. AngularJS精妙绝伦的控制器
  10. 计算机还硬盘后怎么兼容,电脑升级ssd固态硬盘后为什么还是卡?老电脑升级固态硬盘注意事项详解...