文档章节

[ThinkPHP]延迟更新方法的陷阱

吾爱
 吾爱
发布于 2014/08/08 17:37
字数 452
阅读 1610
收藏 3
[code]
$M = D('Article');
$M->where(array('id'=>1))->setLazyInc('click',1,600);//文章访问数量+1,延迟更新
$list = $M->where(array('status'=>0))->limit("0,10")->select();//读取文档列表
[/code]


这时候你打印$list,会发现只有一条记录。
将sql语句打印出来会发现:
[code]
select * from `tp_article` where `id`=1 AND  `status`=0 limit 0,10;
[/code]
延迟更新的条件被带入到下面的列表查询中去了!


tp模型有一个特性:在每次执行sql语句后会清空本次模型查询条件,也就是where() field()  order()等连贯操作所设置的值,这样就避免干扰下一个查询。


where()也有一个特性,同一个模型对象调用两次where(),条件会合并而不是覆盖,例如$M->where(array('id'=>1))->where(array('status'=>0))是相当于$M->where(array('id'=>1,'status'=>0))。
这两个特性恰恰给延迟更新功能埋下了一个陷阱。


延迟更新的时候设置了一个where条件,而由于采用了缓存延迟更新,导致并没有执行数据库操作,where条件被保留。接下来使用同一个模型进行查询操作,where条件被合并。


解决问题:
方法1:修改AdvModel类的,找到lazyWrite()方法,第一行插入一条代码
[code]$this->options=null;[/code]
方法2:将延迟更新操作放到自定义模型类方法里面,并在方法最后加上同样的代码。

本文转载自:http://www.thinkphp.cn/topic/edit/id/21583.html

吾爱
粉丝 142
博文 272
码字总数 91680
作品 0
后端工程师
私信 提问
ThinkPHP where方法:设置查询或操作条件

ThinkPHP where() ThinkPHP where()方法是 Model 类内置方法,用于设置数据库查询或者更新、删除等操作条件。 where 方法支持以字符串、数组和对象方式来设置条件,该方法不能独立使用,必须...

WangEven
2012/05/10
120
0
5.1 趋于稳定,ThinkPHP 发布首个 LTS 版本

官宣:ThinkPHP发布首个LTS版本 版本自2018年元旦正式发布以来,在团队和社区的共同努力下,经过近十个月的迭代更新,共计发布了26个版本(更新记录查看这里),目前已经趋于完善和稳定。 Th...

流年
2018/10/22
5.6K
24
ThinkPHP 查询数据 select(findAll) 方法

ThinkPHP 查询数据 ThinkPHP 查询数据主要提供以下几类查询: select:普通查询,同 findAll() 方法 find:取得符合查询条件的一条记录 getBy动态查询:根据某个字段取得符合查询条件的一条记...

WangEven
2012/05/10
166
0
威胁快报| ThinkPHP v5 新漏洞攻击案例首曝光,阿里云已可告警并拦截

2018年12月10日,ThinkPHP v5系列发布安全更新,修复了一处可导致远程代码执行的严重漏洞。阿里云态势感知已捕获多起基于该漏洞的真实攻击,并对该漏洞原理以及漏洞利用方式进行分析。现在,...

云安全专家
01/02
0
0
Workerman集成ThinkPHP

关于Workerman与ThinkPHP集成的问题,相信已经有大神给出了答案。不过因为各人理解不一样,解决方案也是互有异同。 ThinkPHP版本:3.2.1+ Workerman版本:3.3.0+ 第一步:将Workerman复制到T...

零度开水
2016/05/27
6.5K
4

没有更多内容

加载失败,请刷新页面

加载更多

启动参数

常用启动参数,通过 -Dxx.yy=zz注入应用参数 -Deureka.instance.metadata-map.starkGroup=test3 -Dserver.port=8989 本地调试过程中,可改变端口来启动多个相同服务。修改启动的VM参数即可...

ZH-JSON
15分钟前
4
0
ES配置修改

查看配置 GET /_cluster/settings 修改配置 PUT /_cluster/settings{ "persistent" : { "xpack" : { "monitoring" : { "collection" : { "enabled" : ......

messud4312
27分钟前
3
0
Spring事务传播属性有那么难吗?看这一篇就够了

Spring事务传播属性有那么难吗?看这一篇就够了 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过...

不学无数的程序员
27分钟前
4
0
VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
52分钟前
5
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部