“最难不过坚持”
本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作
有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339
- https://jueru.net/
-
- :weixiao:
-
- :shuijiao: :weiqu: :zhenbang: :leng:
-
- :yiwen: :yiwen: :yiwen: :yiwen:
-
- 这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
-
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)
复制代码
这才是预期的结果。