setInc和setDec方法延迟更新
web ThinkPHP5.1 2019-01-08 3297 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

7439865 2655 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)
setInc/setDec支持延时更新,如果需要延时更新则传入第三个参数,下例中延时10秒更新。
Db::name('user')->where('id', 1)->setInc('score', 1, 10);
setInc/setDec 方法返回影响数据的条数,如果使用了延迟更新的话,可能会返回true

以上来自官方手册https://www.kancloud.cn/manual/thinkphp5_1/354002

1,不太理解,具体什么场景下需要使用延迟更新

2,执行Db::name('user')->where('id', 1)->setInc('score', 1, 10);操作后,不管有没有返回值,数据库中的score值貌似都没有变。再次刷新,score值却增加了2

于是在网上找了一篇网友的解释,以后慢慢理解



关于TP3.2.3延迟更新的一点理解及where冲突的疑问


关于TP3.2.3延迟更新的一点理解及where冲突的疑问。1、延迟更新并不是在制定延迟时间后自动更新。2、连贯操作where的条件冲突。
1、根据手册,3.2.3版本开始,setInc和setDec方法支持延迟更新,其用法如下:
$Article = M("Article"); // 实例化Article对象
$Article->where('id=5')->setInc('view',1,60); // 文章阅读数加1,并且延迟60秒更新(写入)
复制代码
这里并不是指执行这次setInc后60秒即更新view字段,即文章读数加1,如果此操作后没有对同一模型实例、同一条件(id=5)的字段、更新同一字段(view),那么这个文章读数加1是不会执行,而是存在缓存里了,60秒内再一次执行同样的操作也只会累加到内存中,只有60秒后再次执行同样的操作(对同一模型实例、同样的where条件,更新同样的字段)才会一次把之前累加在内存中的值更新到数据库里。
2、上面用到了连贯操作where,如果在此后要查询记录,比如
$Article->select();
复制代码
这里只是举例,并不是要查询所有文章的阅读数。
此时的sql语句会变成
SELECT * FROM tablename WHERE (id=5)
复制代码
这显然不是预期的结果。
而只有在查询中增加where条件,上面setInc中的where条件才会别覆盖
$Article->where('id=3')->select();
复制代码
SELECT * FROM tablename WHERE (id=3)
复制代码
这才是预期的结果。

版权声明:本篇文章来源于网络。 来源链接

相关推荐
Non-static method think\Config::get() should not be called statically
ThinkPHP5.1 | 2018-12-29 10949
原来是这样use think\Config; 改成这样use think\facade\Config; 下面是官方手册的解释 配置获取 要使用Config类,首先需要在你的类文件中引入 use think\facade\Config; 或者(因为系统做了类库别名,其实就是调用think\facade\Config) u...
thinkPHP5 order多条件排序
ThinkPHP5.1 | 2017-10-24 10809
总结如下: //单一条件排序 $user = $this->where(['parentId'=>0)->field('userId,userName,userSort,isShow')->order('userSort', 'asc')->select(); //多个条件排序,可以多加一个order...
评论:0条
评论加载中...
发表评论