thinkphp5模型更新save和软删除delete的坑点和理解

博客讨论了在ThinkPHP5中使用模型进行数据更新和软删除时遇到的问题。在循环更新时,save方法只更新第一条数据,原因是模型保存了原始数据,导致后续更新无效。解决方法包括使用update方法或先查询再更新。对于软删除问题,调用where后导致Query类执行删除,而非模型的Model类,解决方案是先查询再调用delete或使用destroy方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一:循环更新时只有第一条数据更新成功,其它数据都不更新。

官方手册中提到

注意不要在一个模型实例里面做多次更新,会导致部分重复数据不再更新,正确的方式应该是先查询后更新或者使用模型类的update方法更新。

只是说明了问题,但没有解释为什么,所以就没注意,导致出现这个问题。

为什么会有这个问题?

在Model.php模型save方法最后大概1214行

// 重新记录原始数据
$this->origin = $this->data;

origin这个属性记录了原始数据,不管是更新还是写入,都把操作的字段给记录下来了。
而在1105行调用的方法

// 获取有更新的数据
$data = $this->getChangedData();

1266行

//force强制更新就不会比对,这个是文档没有提到的
if ($this->force) {
   
  $data = $this->data;<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值