2.1 KiB
2.1 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| update 返回值 intval | 在 WalletUserStatModel::updateWithOptionalVersion 中对 ThinkORM update 返回值做 intval 显式转换,保证声明返回 int 与运行时一致,并统一所有经该方法的 apply*/incField 出口。 |
|
false |
updateWithOptionalVersion 返回值显式转换
问题
app/model/WalletUserStatModel.php 中:
private static function updateWithOptionalVersion(...): int {
// ...
return $query->update($data); // 当前仓库版本
}
incField/applyDeposit/applyWithdraw等 全部 经updateWithOptionalVersion返回「影响行数」。- ThinkORM 链式
static::where(...)->update($data)在 BaseQuery 上文档为int,但 IDE/静态分析常因Model::update()静态方法(返回Modelable)产生 联合类型,与: int不匹配。 - 你本地已改为
intval($result),这是正确做法:统一把false、数字字符串等收敛为int,避免类型告警与调用方误判。
修改(单点即可)
在 updateWithOptionalVersion 末尾改为:
$result = $query->update($data);
return (int) $result;
或 return intval($result);(与你本地写法等价;项目内可统一用 (int) 或 intval,二选一即可)。
无需 在每个 apply* / incField 再包一层转换——它们已 return static::updateWithOptionalVersion(...),改一处即全覆盖。
PHPDoc(可选一行补充)
在方法 @return 说明中注明:「对 ORM update 结果做整型转换,无匹配行时为 0」。
验证
Docker 内复用既有冒烟(incField / applyDeposit),确认返回仍为 1/0 整数:
docker exec -w /app/www/ray/slot-wallet php82 php -r "
# bootstrap 后 WalletUserStatModel::incField(...)
"
不涉及
- 不改 MQ / WalletLogic
- 不恢复
inc()->update()链式写法