学习
实践
活动
专区
工具
TVP
写文章

ThinkPHP5开发连载三十三之数据库查询构造器链式操作的方法四

上一篇文章讲解“数据库查询构造器-链式操作的方法三”,本篇文章讲解“数据库查询构造器-链式操作的方法四”。

十四、lock

Lock方法是用于数据库的锁机制,如果在查询或者执行操作的时候使用。

1)lock方法的基本使用

在Index控制器中,新建lockQuery方法:

预览:

注意:

1.就会自动在生成的SQL语句最后加上FOR UPDATE或者FOR UPDATE NOWAIT(Oracle数据库)。

2)lock传入字符串

lock方法支持传入字符串用于一些特殊的锁定要求。

修改Index控制器下的lockQuery方法:

预览:

十五、cache

cache方法用于查询缓存操作,也是连贯操作方法之一。

cache可以用于select、find、value和column方法,以及其衍生方法,使用cache方法后,在缓存有效期之内不会再次进行数据库查询操作,而是直接获取缓存中的数据,关于数据缓存的类型和设置可以参考缓存部分。

1)基本使用

在Index控制器中,新建caQuery方法:

预览:

注意:

1.缓存配置文件位于(ThinkPHP5.1):config/cache.php

2.生成的缓存文件位置:runtime/cache/

第一次查询结果会被缓存,第二次查询相同的数据的时候就会直接返回缓存中的内容,而不需要再次进行数据库查询操作。

2)设置缓存有效期

默认情况下,缓存有效期是由默认的缓存配置参数决定的,但cache方法可以单独指定。

修改Index控制器下的caQuery方法:

预览:

注意:

1.表示对查询结果的缓存有效期60秒。

3)指定缓存标识

修改Index控制器下的caQuery方法:

预览:

注意:

1.指定查询缓存的标识可以使得查询缓存更有效率。

4)通过缓存标识,在外部获取缓存数据

指定缓存标识后,在外部就可以通过\think\Cache类直接获取查询缓存的数据。

Index控制器下的caQuery方法不变,在admin模块的Index控制器下的index方法中获取缓存的数据。

预览:

注意:

1.可以再测试缓存时间,index/index/caQuery方法中缓存时间为60s,过了60s,在admin/index/index中将获取不到缓存数据,因为缓存过期。

5)设置缓存标签

cache方法支持设置缓存标签。

修改Index控制器下的caQuery方法:

6)缓存自动更新

这里的缓存自动更新是指一旦数据更新或者删除后会自动清理缓存(下次获取的时候会自动重新缓存)。

当你删除或者更新数据的时候,可以调用相同key的cache方法,会自动更新(清除)缓存。

修改Index控制器下的caQuery方法:

预览:

注意:

1.最后查询的数据不会受第一条查询缓存的影响,确保查询和更新或者删除使用相同的缓存标识才能自动清除缓存。

7)使用find方法并且使用主键查询的情况,不需要指定缓存标识,会自动清理缓存

修改Index控制器下的caQuery方法:

预览:

最后查询的数据会是更新后的数据。

十六、comment

COMMENT方法 用于在生成的SQL语句中添加注释内容。

在Index控制器中,新建comQuery方法:

预览:

十七、fetchSql

fetchSql用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法。

在Index控制器中,新建fsQuery方法:

预览:

十八、failException

failException设置查询数据为空时是否需要抛出异常,如果不传入任何参数,默认为开启,用于select和find方法。

1)基本用法

在Index控制器中,新建failQuery方法

预览:

不传入参数,默认为开启,开启后查询数据为空时,抛出异常。

修改Index控制器下的failQuery方法

预览:

注意:

1.failException设置查询数据为空时是否需要抛出异常,如果不传入任何参数,默认为开启,查询数据为空时,抛出异常;传入false代表关闭,查询数据为空时,不抛出异常。

2)查空报错

修改Index控制器下的failQuery方法:

预览:

注意:

1.查询单条数据使用:findOrFail

十九、sequence

sequence方法用于pgsql数据库指定自增序列名,其它数据库不必使用,用法为:

ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员

关注卓象程序员,定期发布技术文章

下一篇讲解“查询构造器-聚合查询”

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180830A0V6LA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券