hyperf 3.1.69 是小版本热修复,仅修复 php 8.2 下 readonly 反序列化跳过、联合类型验证异常及 cookie $partitioned 默认值;不新增 json 查询语法与自动 cookie 持久化,功能需手动实现。

Hyperf 3.1.69 不提供独立“下载包”,它通过 Composer 安装,且该版本未新增 JSON 查询语法支持或持久化 Cookie 的底层能力——相关功能依赖已有组件配置,不是版本升级自动生效的。
Hyperf 3.1.69 实际更新点(非宣传口径)
官方 changelog 显示 v3.1.69 是一个小版本热修复,重点在:
- 修复
hyperf/json-rpc在 PHP 8.2 下对readonly属性反序列化的字段跳过问题(此前会导致 RPC 请求体丢失部分字段) - 修正
hyperf/validation对联合类型string|int|null的规则推导异常(避免 validate() 返回空数组而非错误) - 调整
hyperf/http-message中Cookie构造器对$partitioned参数的默认值,使其与 Chrome 127+ 行为对齐
它没有新增 JSON 字段查询操作符(如 @>、#>)、不改变 withCookie() 的行为逻辑,也不自动启用 Cookie 持久化。
JSON 字段查询仍需手写原生 SQL 或扩展 cast
Hyperf 3.1.x 的 Eloquent 默认不支持 MySQL JSON 函数的链式调用(如 whereJsonContains()),你得自己处理:
- 用
DB::select()执行带JSON_CONTAINS()或->>'$.key'的原生 SQL - 在模型中定义
$casts = ['config' => 'array']仅用于读写转换,不参与 WHERE 条件生成 - 若需复用,可封装一个
scopeWhereJsonHasKey()查询作用域,内部调用whereRaw('JSON_CONTAINS(?, ?)', [$json, $path])
别指望 where('config->status', 'active') 这种写法能生效——它会被当成普通字符串字段处理,除非你重写 Grammar 或用第三方包。
Cookie 持久化靠参数,不是框架版本决定
withCookie() 是否持久,只取决于你传入的 $expire 和 $secure 参数:
-
$expire = 0→ 浏览器会话级 Cookie(关浏览器即丢) -
$expire = time() + 86400→ 有效期 1 天的持久 Cookie -
$secure = true→ 强制 HTTPS 传输(生产环境必须设) -
$httpOnly = true→ 防 XSS,不影响持久性
Hyperf 3.1.69 只修复了 $partitioned 默认值,但如果你没显式传 $expire > 0,哪怕版本再新,Cookie 依然不会持久。
真正要做的三件事
别盯着版本号,检查这三项:
- 确认
composer show hyperf/framework输出确实是v3.1.69,而非缓存导致的假象 - 执行
rm -rf runtime/container/ runtime/cache/,否则新版本的注解解析和反射缓存不会刷新 - 验证 JSON 查询是否用了
whereRaw()或自定义作用域,而不是依赖不存在的 ORM 方法
版本号只是补丁编号,功能落地全靠你写的那几行 whereRaw 和那个 time() + 3600。











