thinkphp5.1在调用find方法后立即调用update方法要谨慎

今天帮一个朋友改一个业务系统的问题,这个系统是基于thinkphp5.1框架开发的,这个框架在国内的用户很多,是PHP领域一个不错的编程框架,之前也有过研究,不过目前框架结构和类库方法都是借鉴了laravel的思想,也基本上和市面上的主流框架一样,大量使用了容器、路由、中间件等设计方式,扩展也比较容易。

不过今天在朋友业务系统中一直碰到一个奇怪的问题,在将返回查询构造器的回调传入方法后,只要update数据,数据记录的自增主键id就变成了0,导致报错,经过断点后发现只要是Db类的find()方法调用后,如果立即调用update()方法就出现上诉情况。

后来仔细看了下源码,并跟踪了thinkphp5.1的Query类,发现只要在其update()方法调用前调用了find()方法,则$this→options['data']里面就自动有了一个健值['id'=>null],从而导致数据更新时自增主键id被更新为0,本想修改框架代码,但是考虑到朋友会更新升级框架,就换了一种写法,以避免被thinkphp的这个坑害死,下图是更换的一种写法。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容