自从上次TP官方自爆了个安全漏洞后,火速就去做了升级,升级完我发现好几个问题,先是刚拉下来的框架就跑不起来,提示控制器不存在,反馈后流年竟然在线秒升级。后面又发现验证码加载不出来了,这个怪我,依赖没搞好,captcha扩展被删了导致的。再接着又发现paginate的query参数丢了,因为更新漏洞后,我发现参数获取方式变了,导致query参数被CDN给过滤了,没办法又去CDN做了下参数过滤排除解决。
然后过了两天我修改文章,发现文章标签又有问题了,选了多个标签,到最后就变成了一个,其他标签莫名都被删了,之前一直好好的,估计有是更新造成的。就去看了官方的更新日志,发现确实有更新多对多关联模型,这下好了,原本不更新没问题,修正了,反而有问题了,难道我之前的是将错就错么。
这个写入结果证明原本应该是多个ID的被写成一个了,就去翻了下belongsToMany的saveAll方法,翻来看去,也没发现啥问题,正常的将数据遍历后执行的save方法。没辙就去做了trace调试,明确的问题就是和预想的一样,不同的值被写成同一个了,那天流年在群里跟另外个小伙伴说做下跟踪调试,在model类431行查看下$this->exists结果,我顺道就去看了下我的,发现第一次写入的时候正常,后面写入都多了个主键,所以数据全写岔了。
对框架底层不熟,一时不知在框架上如何改起,二来下次等TP发版的时候应该就修复了,索性只在我业务层面改下算了,把原本saveAll方面改成遍历后调save方法写入算了(第一张图的注释部分)。
好了,水文结束,对了,似乎多个版本受影响,从5.1.28到5.1.32都有问题。