From 3419730f068e09021279eae7a4cd5529950e6c7b Mon Sep 17 00:00:00 2001 From: ichynul Date: Mon, 22 Jun 2026 14:49:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20`find=20=3D>=20force=20=3D?= =?UTF-8?q?>=20save`=20=E8=BF=99=E4=B8=AA=E6=B5=81=E7=A8=8B=E4=B8=8B`updat?= =?UTF-8?q?e=5Ftime`=20=E4=B8=8D=E6=9B=B4=E6=96=B0=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ```php $user = User::find(1); $res = $user->force()->save(['name' => '小明' . time()]); //结果表中`update_time`不更新。 ``` 原因分析,find查询出表中的所有字段,包含`update_time`。 当调用->force()后,更新的时候不检查是否需要更新并unset()未改变字段。 把查询出来的`update_time`值原样写回去。 在`autoDateTime`方法中,判断当保存的数据中`update_time`字段空才会把它设置为当前时间 --- src/Model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model.php b/src/Model.php index adf3948a..1774f5d8 100644 --- a/src/Model.php +++ b/src/Model.php @@ -450,7 +450,7 @@ protected function validateAndFilterData(bool $isUpdate): array unset($data[$name]); } elseif ($val instanceof Collection || (!empty($allow) && !in_array($name, $allow))) { unset($data[$name]); - } elseif ($isUpdate && !$this->isForce() && $this->isNotRequireUpdate($name, $val, $origin)) { + } elseif ($isUpdate && (!$this->isForce() || $name == $this->getOption('updateTime')) && $this->isNotRequireUpdate($name, $val, $origin)) { unset($data[$name]); } else { $val = $this->setAttrOfWith($name, $val);