# 版本更新记录

# v3.1.67 - 2026-02-24

## 新增

- [#7459](https://github.com/hyperf/hyperf/pull/7459) 使用验证器规则 `exists` 和 `unique` 时，支持使用形如 `App\\Model\\User` 的模型写法。
- [#7555](https://github.com/hyperf/hyperf/pull/7555) 新增 `Hyperf\Crontab\Mutex\RedisServerMutexByNodeName`。
- [#7607](https://github.com/hyperf/hyperf/pull/7607) 为 `hyperf/database` 增加新的模型自定义类型转换器 `AsCollection`。
- [#7648](https://github.com/hyperf/hyperf/pull/7648) 为 `nacos` 支持阿里云 `mse` 签名。

## 优化

- [#7676](https://github.com/hyperf/hyperf/pull/7676) 优化 `hyperf/tracer` 组件的客户端标签写法。

## 修复

- [#7703](https://github.com/hyperf/hyperf/pull/7703) 修复 `hyperf/cache` 内存适配器不支持默认 `ttl` 的问题。
- [#7705](https://github.com/hyperf/hyperf/pull/7705) 修复 `Hyperf\Database\Query\Builder::eachById` 无法正常使用的问题。
- [#7712](https://github.com/hyperf/hyperf/pull/7712) 修复 `classes` 等扫描缓存解析失败导致报错的问题。

# v3.1.66 - 2026-01-25

## 新增

- [#7667](https://github.com/hyperf/hyperf/pull/7667) [#7672](https://github.com/hyperf/hyperf/pull/7672) 为 `hyperf/grpc-client` 新增参数 `client_count` 用来支持创建多个客户端。
- [#7668](https://github.com/hyperf/hyperf/pull/7668) 为 `Hyperf\Guzzle\PoolHandler` 新增参数 `$isCookiePersistent` 用来支持是否持久化 `Cookies`。
- [#7670](https://github.com/hyperf/hyperf/pull/7670) 为文件生成命令增加 `--path` 选项，用来指定生成位置。
- [#7684](https://github.com/hyperf/hyperf/pull/7684) 新增方法 `Hyperf\Database\Schema\Builder::withoutForeignKeyConstraints()`。
- [#7693](https://github.com/hyperf/hyperf/pull/7693) 为 `ForeignKeyDefinition` 新增方法 `cascadeOnDelete()`, `restrictOnDelete()`, `noActionOnDelete()`, `restrictOnUpdate()`, `nullOnUpdate()`, `noActionOnUpdate()`。
- [#7698](https://github.com/hyperf/hyperf/pull/7698) 新增方法 `Pool::flushAll()` 和 `PoolFactory::flushAll()`。
- [#7699](https://github.com/hyperf/hyperf/pull/7699) 为 `QueryBuilder` 新增方法 `whereJsonContainsKey()`, `orWhereJsonContainsKey()`, `whereJsonDoesntContainKey()`, `orWhereJsonDoesntContainKey()`。

## 优化

- [#7675](https://github.com/hyperf/hyperf/pull/7675) 为 `metric` 组件删除多余的定时器清理代码。
- [#7687](https://github.com/hyperf/hyperf/pull/7687) 为 `JSON-RPC` 组件增加默认捕获 `ValidationException` 的逻辑。

## 修复

- [#7669](https://github.com/hyperf/hyperf/pull/7669) 修复 `PostgreSQL` 组件中 `boolean` 格式问题。
- [#7682](https://github.com/hyperf/hyperf/pull/7682) 修复 `Blueprint::foreign()` 返回值注释错误。

# v3.1.65 - 2025-12-04

## 新增

- [#7585](https://github.com/hyperf/hyperf/pull/7585) 新增事件 `Hyperf\Kafka\Event\FailToAck` 和 `Hyperf\Kafka\Event\FailToRequeue`。
- [#7632](https://github.com/hyperf/hyperf/pull/7632) 增加 `thecodingmachine/graphqlite:^8.1` 的支持。
- [#7644](https://github.com/hyperf/hyperf/pull/7644) 新增 `Str::uuidv7()`。

## 优化

- [#7649](https://github.com/hyperf/hyperf/pull/7649) 为 `Hyperf\Metric\Listener\OnBeforeHandle` 移除 `AfterExecute` 的事件监听。

# v3.1.64 - 2025-11-12

## 新增

- [#7600](https://github.com/hyperf/hyperf/pull/7600) 新增方法 `Hyperf\Collection\Arr::sole()`。
- [#7601](https://github.com/hyperf/hyperf/pull/7601) 增加异步队列消息执行结果枚举 `Hyperf\AsyncQueue\Result`。

## 优化

- [#7604](https://github.com/hyperf/hyperf/pull/7604) 优化异步队列 `AsyncQueueMessage` 注解支持定义在 `protected` 和 `private` 方法上。
- [#7611](https://github.com/hyperf/hyperf/pull/7611) 为 `Console::command()` 增加注释 `@param-closure-this`，用来获得更好的 `ide` 代码提示。
- [#7615](https://github.com/hyperf/hyperf/pull/7615) 把异步队列的消费者进程中的 `$queue` 参数重命名为 `$pool`。

## 修复

- [#7596](https://github.com/hyperf/hyperf/pull/7596) 修复使用验证器时，使用了不存在的场景值，导致报错的问题。

# v3.1.63 - 2025-10-30

## 修复

- [#7536](https://github.com/hyperf/hyperf/pull/7536) 修复 `Hyperf\Validation\ValidationRuleParser::parseParameters()` 不支持 `PHP 8.4` 的问题。
- [#7543](https://github.com/hyperf/hyperf/pull/7543) 修复 `nacos` 组件代码没有严格符合 `psr4` 标准的问题。
- [#7554](https://github.com/hyperf/hyperf/pull/7554) 修复参数 `Redis` 集群 `context` 参数在没有设置密码时，不生效的问题。
- [#7561](https://github.com/hyperf/hyperf/pull/7561) 重置 `Nacos\Application` 的构造函数参数名。

## 新增

- [#7553](https://github.com/hyperf/hyperf/pull/7553) 对 `hyperf/testing` 组件增加 `PATCH` 方法的支持。

## 优化

- [#7511](https://github.com/hyperf/hyperf/pull/7511) 优化 `hyperf/database` 的注释。
- [#7537](https://github.com/hyperf/hyperf/pull/7537) 对 `swagger` 组件，使用 `priorityMiddleware` 替代 `middleware`。

# v3.1.62 - 2025-10-11

## 新增

- [#7469](https://github.com/hyperf/hyperf/pull/7469) 使用参数验证器时，支持通过场景值覆写参数验证规则。
- [#7531](https://github.com/hyperf/hyperf/pull/7531) 为脚本 `migrate:rollback` 新增参数 `batch`。
- [#7545](https://github.com/hyperf/hyperf/pull/7545) 运行脚本最后自动执行 `CoordinatorManager::until(Constants::WORKER_EXIT)->resume();`。

## 修复

- [#7547](https://github.com/hyperf/hyperf/pull/7547) 修复 `kafka` 消费者配置成员变量 `$pool` 时，无法正常使用的问题。

# v3.1.61 - 2025-09-04

## 新增

- [#7467](https://github.com/hyperf/hyperf/pull/7467) 为 Nacos SDK 支持 v2 和 v3 版本。
- [#7476](https://github.com/hyperf/hyperf/pull/7476) 为 `Hyperf\Support\Fluent` 新增 trait `InteractsWithData` 支持。
- [#7480](https://github.com/hyperf/hyperf/pull/7480) 新增方法 `Hyperf\Database\Model\Builder::incrementOrCreate()`。
- [#7481](https://github.com/hyperf/hyperf/pull/7481) 新增方法 `Collection::doesntContainStrict()` 和 `LazyCollection::doesntContainStrict()`。
- [#7483](https://github.com/hyperf/hyperf/pull/7483) 新增 `Hyperf\Database\Model\Relations\BelongsTo::dissociate()` 的别名 `disassociate()`。
- [#7484](https://github.com/hyperf/hyperf/pull/7484) 新增方法 `Hyperf\Database\Model\Model::isSoftDeletable()`。
- [#7486](https://github.com/hyperf/hyperf/pull/7486) 新增方法 `Hyperf\Database\Model\Builder::except()`。
- [#7487](https://github.com/hyperf/hyperf/pull/7487) 新增模型对 `ArrayObject` 类型的转换器 `Hyperf\Database\Model\Casts\AsArrayObject`。
- [#7492](https://github.com/hyperf/hyperf/pull/7492) 为 `Hyperf\Pipeline\Pipeline` 新增 trait `Macroable` 的支持。
- [#7499](https://github.com/hyperf/hyperf/pull/7499) 新增常量 `Hyperf\Kafka\Constants\KafkaStrategy::STICKY_ASSIGNOR`。
- [#7500](https://github.com/hyperf/hyperf/pull/7500) 新增方法 `Hyperf\Collection\Arr::push()` 和 `Hyperf\Collection\Arr::array()`。
- [#7502](https://github.com/hyperf/hyperf/pull/7502) 新增方法 `Hyperf\Collection\Arr::hasAll()`。
- [#7509](https://github.com/hyperf/hyperf/pull/7509) 新增 `Hyperf\Codec\Packer\Resp3Packer`。
- [#7518](https://github.com/hyperf/hyperf/pull/7518) 新增方法 `Hyperf\Database\Query\Grammars\Grammar::whereValueBetween()`。

## 优化

- [#7501](https://github.com/hyperf/hyperf/pull/7501) 为 `Hyperf\Macroable\Macroable::macro()` 增加引用验证，避免使用引用导致代码执行结果不达预期的情况。

# v3.1.60 - 2025-08-02

## 修复

- [#7447](https://github.com/hyperf/hyperf/pull/7447) 修复 `migrate:fresh` 无法删除默认表的问题。
- [#7449](https://github.com/hyperf/hyperf/pull/7449) 修复方法 `Hyperf\Database\Migrations\Migrator::reset()` 不支持传入 `string` 格式参数的问题。

## 新增

- [#7466](https://github.com/hyperf/hyperf/pull/7466) 为 `Hyperf\Support\Fluent` 新增方法 `isEmpty` / `isNotEmpty` / `getIterator`。
- [#7473](https://github.com/hyperf/hyperf/pull/7473) 为 `kafka` 新增配置项 `produce_retry` 和 `producer_retry_sleep`。

# v3.1.59 - 2025-07-03

## 修复

- [#7421](https://github.com/hyperf/hyperf/pull/7421) 修复当设置 `Cookies` 中某个值为 "" 时，无法正确删除此 `Cookie` 的问题。
- [#7424](https://github.com/hyperf/hyperf/pull/7424) 修复使用 `watcher` 组件时，`php` 二进制文件路径带有空格会导致报错的问题。
- [#7427](https://github.com/hyperf/hyperf/pull/7427) 修复验证器中 `exclude` 规则不可用的问题。

## 优化

- [#7394](https://github.com/hyperf/hyperf/pull/7394) 当使用 `Redis::transaction($callback)` 和 `Redis::transaction($callback)` 后，可以立即释放连接到连接池中。

# v3.1.57 - 2025-06-23

## 修复

- [#7402](https://github.com/hyperf/hyperf/pull/7402) 修复使用 `pgsql-swoole` 数据库时，参数 `connect_timeout` 无法正常工作的问题。
- [#7414](https://github.com/hyperf/hyperf/pull/7414) 修复 `sqlite` 数据库迁移无法正常使用的问题。
- [#7420](https://github.com/hyperf/hyperf/pull/7420) 修复使用模型缓存时，`luasha` 会在 `Redis` 重启时发生故障的问题。

## 优化

- [#7411](https://github.com/hyperf/hyperf/pull/7411) 移除 `Hyperf\Utils` 组件。

# v3.1.56 - 2025-06-05

## 修复

- [#7400](https://github.com/hyperf/hyperf/pull/7400) 使用 `pgsql` 时，修复 `gen:model` 脚本无法正常使用的问题。
- [#7410](https://github.com/hyperf/hyperf/pull/7410) 修复使用缓存模块时，内存适配器不支持 `setMultiple` 方法的问题。

## 新增

- [#7392](https://github.com/hyperf/hyperf/pull/7392) 为 `AsCommand` 和 `ClosureCommand` 增加 `coroutine` 选项。
- [#7404](https://github.com/hyperf/hyperf/pull/7404) 为 `CacheAHead` 注解增加 `runAsync` 参数，用来异步初始化缓存操作，但会导致返回值为 `Null`。

# v3.1.55 - 2025-05-15

## Added

- [#7365](https://github.com/hyperf/hyperf/pull/7365) 为 `logger` 配置文件，增加 `callable` 方式支持。
- [#7381](https://github.com/hyperf/hyperf/pull/7381) 新增 `Hyperf\Database\PgSQL\Query\Grammars\PostgresGrammar\compileJsonOverlaps`。

## Fixed

- [#7363](https://github.com/hyperf/hyperf/pull/7363) 修复 `Hyperf\HttpServer\Router\RouteCollector` 中代码注释，解决 `IDE` 错误误报。
- [#7379](https://github.com/hyperf/hyperf/pull/7379) 修复使用 `PgSQL` 的 `Migrator` 功能时，`PDO` 适配器无法正常使用的问题。

# v3.1.54 - 2025-04-27

## 新增

- [#7316](https://github.com/hyperf/hyperf/pull/7316) 为 `hyperf/resource` 组件增加支持重写 `paginationInformation` 方法的接口。
- [#7343](https://github.com/hyperf/hyperf/pull/7343) 新增 `Hyperf\Coroutine\Barrier`。

## 修复

- [#7328](https://github.com/hyperf/hyperf/pull/7328) 修复使用 `Blueprint` 建表时，主动配置主键导致报错的问题。
- [#7334](https://github.com/hyperf/hyperf/pull/7334) 修复 `kafka` 消息生产者，在链接断开后无法重连的问题。

# v3.1.53 - 2025-04-03

## 修复

- [#7309](https://github.com/hyperf/hyperf/pull/7309) 修复 `Hyperf\Testing\Client` 在使用非 `POST` 请求时，不支持 `Json` 结构的问题。
- [#7318](https://github.com/hyperf/hyperf/pull/7318) 修复 `WebSocket` 客户端不支持接收 `CloseFrame` 的问题。
- [#7329](https://github.com/hyperf/hyperf/pull/7329) 修复创建模型时，`$connection` 类型报错的问题。

## 新增

- [#7311](https://github.com/hyperf/hyperf/pull/7311) 新增 `Hyperf\Redis\Event\CommandExecuted::getFormatCommand()`。
- [#7313](https://github.com/hyperf/hyperf/pull/7313) 新增验证器规则 `contains`, `extensions` and `hex_color`。
- [#7314](https://github.com/hyperf/hyperf/pull/7314) 增加 `hyperf/db` 组件中 `pgsql` 引擎的 `schema` 配置。
- [#7325](https://github.com/hyperf/hyperf/pull/7325) 为 `Hyperf\Di\ReflectionType` 增加注解元数据。
- [#7332](https://github.com/hyperf/hyperf/pull/7332) 新增方法 `Hyperf\Memory\LockManager::exists()`。

# v3.1.52 - 2025-02-27

## 新增

- [#7200](https://github.com/hyperf/hyperf/pull/7200) 新增方法 `Hyperf\Database\Connection::scalar()` 用于读取满足查询条件的第一行数据的第一个字段值。
- [#7279](https://github.com/hyperf/hyperf/pull/7279) 为 `gen:model` 增加解析 `trait` 中的 `Relation` 和 `Attribute` 的功能。
- [#7286](https://github.com/hyperf/hyperf/pull/7286) 新增方法 `Hyperf\Coroutine\Coroutine::list()`。
- [#7291](https://github.com/hyperf/hyperf/pull/7291) 当使用 `Model::createOrFirst` 读到 `null` 值时，抛出异常。

# v3.1.51 - 2025-02-06

## 新增

- [#7250](https://github.com/hyperf/hyperf/pull/7250) 新增 `Hyperf\AsyncQueue\Driver\Driver::getConfig()`。
- [#7255](https://github.com/hyperf/hyperf/pull/7255) 为 `Hyperf\Database\Model\Builder` 新增 `createOrFirst()` 和 `createOrRestore()`。
- [#7259](https://github.com/hyperf/hyperf/pull/7259) 为 `Hyperf\Database\Query\Builder` 新增 `existsOr` 和 `doesntExistOr`。
- [#7260](https://github.com/hyperf/hyperf/pull/7260) 新增 `Hyperf\Database\Query\Builder::sole()`。
- [#7261](https://github.com/hyperf/hyperf/pull/7261) 新增 `Hyperf\Database\Model\Model::discardChanges()`。
- [#7262](https://github.com/hyperf/hyperf/pull/7262) 新增 `Hyperf\Database\Model\Model::hasAppended()`。
- [#7263](https://github.com/hyperf/hyperf/pull/7263) 新增 `Hyperf\Coroutine\WaitConcurrent`。
- [#7265](https://github.com/hyperf/hyperf/pull/7265) 新增 `Hyperf\Command\Concerns\Prohibitable`。
- [#7269](https://github.com/hyperf/hyperf/pull/7269) 新增 `Hyperf\Redis\Event\CommandExecuted`。
- [#7273](https://github.com/hyperf/hyperf/pull/7273) 使用命令创建文件后，支持使用 `cursor` 编辑器自动打开对应文件。

## 优化

- [#7258](https://github.com/hyperf/hyperf/pull/7258) 优化读取 `composer.lock` 的代码实现。
- [#7276](https://github.com/hyperf/hyperf/pull/7276) 使用 `static::class` 代替 `get_called_class`。

# v3.1.50 - 2025-01-09

## 修复

- [#7231](https://github.com/hyperf/hyperf/pull/7231) 修复使用 `WebSocket` 时，错误的 `OnMessage` 处理器导致致命异常的问题。

## 新增

- [#7224](https://github.com/hyperf/hyperf/pull/7224) 新增 `Hyperf\Coroutine\Mutex`。
- [#7233](https://github.com/hyperf/hyperf/pull/7233) 为 `AMQP` 组件增加新配置项 `connection_name` 用于自定义连接名称。

## 优化

- [#7223](https://github.com/hyperf/hyperf/pull/7223) 优化从 `composer.lock` 读取 `extra` 数据的代码。
- [#7227](https://github.com/hyperf/hyperf/pull/7227) 优化 `Hyperf\Support\SafeCaller` 的代码，适配 `PHPStan` 静态检测。

# v3.1.49 - 2024-12-17

## 优化

- [#7206](https://github.com/hyperf/hyperf/pull/7206) 支持 `Swoole` 6.0 版本。
- [#7209](https://github.com/hyperf/hyperf/pull/7209) 优化 `AbstractPaginator::getUrlRange()` 的实现方式。

# v3.1.48 - 2024-12-12

## 优化

- [#7194](https://github.com/hyperf/hyperf/pull/7194) 当数据库更新触发唯一键错误时，抛出异常 `UniqueConstraintViolationException`.
- [#7187](https://github.com/hyperf/hyperf/pull/7187) 当使用单元测试时，支持从 `Request` 中读取 `Server` 相关参数。

## 修复

- [#7188](https://github.com/hyperf/hyperf/pull/7188) 修复 `Hyperf\HttpMessage\Server\ResponsePlusProxy` 无法支持其他不携带 `getCookies` 方法的 `Response` 实现类。

## 新增

- [#7192](https://github.com/hyperf/hyperf/pull/7192) 新增方法 `Hyperf\Database\Model\Collection::findOrFail()`.

# v3.1.47 - 2024-11-28

## 修复

- [#7176](https://github.com/hyperf/hyperf/pull/7176) 修复使用 `Swow` 时，无法正常设置 `Cookies` 的问题。

# v3.1.46 - 2024-11-21

## 新增

- [#7148](https://github.com/hyperf/hyperf/pull/7148) 为 `hyperf/validation` 增加 `exclude` 验证规则。
- [#7150](https://github.com/hyperf/hyperf/pull/7150) 为 `hyperf/validation` 增加部分验证规则，例如 `accepted_if`, `ascii`, `date_equals` 等。
- [#7151](https://github.com/hyperf/hyperf/pull/7151) 为 `Hyperf\Testing\Concerns\RunTestsInCoroutine::runTestsInCoroutine()` 增加钩子方法 `beforeTestInCoroutine` 和 `afterTestInCoroutine`。
- [#7156](https://github.com/hyperf/hyperf/pull/7156) 新增方法 `Hyperf\Database\Schema\Blueprint::engine()`。

# v3.1.45 - 2024-11-14

## 新增

- [#7141](https://github.com/hyperf/hyperf/pull/7141) 新增方法 `Hyperf\Collection\Arr::shuffleAssoc`。
- [#7143](https://github.com/hyperf/hyperf/pull/7143) 新增方法 `Hyperf\Database\Model\Builder::findOr`。
- [#7147](https://github.com/hyperf/hyperf/pull/7147) 为 `Model\Collection` 增加方法 `setVisible` 和 `setHidden`。
- [#7149](https://github.com/hyperf/hyperf/pull/7149) 为 `swagger` 组件增加在配置中设置 `servers` 和 `info` 的能力。

## 修复

- [#7133](https://github.com/hyperf/hyperf/pull/7133) 修复使用 `migration` 时，主动配置 `connection` 不生效的问题。

# v3.1.44 - 2024-10-24

## 新增

- [#7063](https://github.com/hyperf/hyperf/pull/7063) 为 `Hyperf\Database\Schema\Blueprint` 新增 `nullableUuidMorphs` `uuidMorphs` 和 `nullableNumericMorphs`。
- [#7070](https://github.com/hyperf/hyperf/pull/7070) 新增 `Blueprint::charset()` 和 `Blueprint::collation()`。
- [#7071](https://github.com/hyperf/hyperf/pull/7071) 新增 `Hyperf\Database\Schema\Blueprint::tinyText()`。
- [#7110](https://github.com/hyperf/hyperf/pull/7110) 支持禁用 `class morphs`。

## 修复

- [#7124](https://github.com/hyperf/hyperf/pull/7124) 修复 `sortByMany` 方法使用 `SORT_NATURAL` 时，因数据为 `Null` 导致报错的问题。

# v3.1.43 - 2024-10-10

## 修复

- [#7068](https://github.com/hyperf/hyperf/pull/7068) 修复 `Str::trim` 不支持 `trim/ltrim/rtim` 默认规则 `\n\r\t\v` 的问题。
- [#7109](https://github.com/hyperf/hyperf/pull/7109) 修复注解 `CacheAHead` 不能使用默认 `ttl` 的问题。

## 优化

- [#7082](https://github.com/hyperf/hyperf/pull/7082) 优化 `Hyperf\Database\Query\Grammars\Grammar::compileUpdate()` 的实现代码。
- [#7084](https://github.com/hyperf/hyperf/pull/7084) 优化 `Hyperf\Watcher\Ast\RewriteClassNameVisitor::leaveNode()` 的实现代码。
- [#7105](https://github.com/hyperf/hyperf/pull/7105) 使用 `watcher` 时，移除 `env_vars` 来保证子进程的环境变量与主进程一致。

## 新增

- [#7025](https://github.com/hyperf/hyperf/pull/7025) 新增方法 `Hyperf\Database\Model\Relations\Relation::getMorphAlias()`。

# v3.1.42 - 2024-09-25

## 修复

- [#7081](https://github.com/hyperf/hyperf/pull/7081) 修复方法 `data_get` 不支持非 `string` 类型 `key` 值的问题。

## 新增

- [#7088](https://github.com/hyperf/hyperf/pull/7088) 优化了所有组件的 `Github Actions` 的使用方式。

# v3.1.41 - 2024-09-19

## 新增

- [#7059](https://github.com/hyperf/hyperf/pull/7059) 新增方法 `Hyperf\Database\Schema\Schema::getForeignKeys()`。
- [#7064](https://github.com/hyperf/hyperf/pull/7064) 为 `DoctrineConnection` 增加枚举类型支持。
- [#7077](https://github.com/hyperf/hyperf/pull/7077) 新增方法 `ModelUpdateVisitor::getReturnType`。

# v3.1.40 - 2024-09-12

## 修复

- [#7051](https://github.com/hyperf/hyperf/pull/7051) 修复使用 `migrate` 时，`--database` 选项不生效的问题。

## 优化

- [#7053](https://github.com/hyperf/hyperf/pull/7053) 将 `Str::is()` 中的 `$value` 和 `$pattern` 入参强制转化为 `string` 类型。

# v3.1.39 - 2024-09-05

## 修复

- [#7034](https://github.com/hyperf/hyperf/pull/7034) 修复使用 `phar:build` 时，由于入口函数定义了 `declare` 导致打包后，运行失败的问题。
- [#7043](https://github.com/hyperf/hyperf/pull/7043) 修复 `jsonrpc-http` 不支持 `swow` 的问题。

## 优化

- [#7033](https://github.com/hyperf/hyperf/pull/7033) 优化 `ConsoleLogger` 支持 `watcher` 组件。
- [#7040](https://github.com/hyperf/hyperf/pull/7040) 优化 `phar:build` 脚本的打包速度。

## 新增

- [#7024](https://github.com/hyperf/hyperf/pull/7024) 为 `Hyperf\Database\Schema\Schema` 新增方法 `whenTableHasColumn` 和 `whenTableDoesntHaveColumn`。

# v3.1.38 - 2024-08-29

## 新增

- [#7016](https://github.com/hyperf/hyperf/pull/7016) 新增 `QueryBuilder::reorder` 方法，用来重置排序规则。
- [#7023](https://github.com/hyperf/hyperf/pull/7023) 新增 `Hyperf\Contract\CanBeEscapedWhenCastToString` 并修改了部分静态检测的错误。
- [#7028](https://github.com/hyperf/hyperf/pull/7028) 新增 `Hyperf\Framework\Logger\ConsoleLogger`.

# v3.1.37 - 2024-08-22

## 新增

- [#7015](https://github.com/hyperf/hyperf/pull/7015) 为 `Hyperf\Database\Query\Builder` 新增方法 `whereNone` 和 `orWhereNone`。

## 优化

- [#6839](https://github.com/hyperf/hyperf/pull/6839) 使用 `匿名类` 避免 `Migration` 类重定义的问题。

# v3.1.36 - 2024-08-15

## 新增

- [#6971](https://github.com/hyperf/hyperf/pull/6971) 为 `Cookie` 增加 `partitioned` 支持。
- [#6990](https://github.com/hyperf/hyperf/pull/6990) 为 `Hyperf\Support\Traits\InteractsWithTime` 增加 `currentTimestampMs` 方法。
- [#6998](https://github.com/hyperf/hyperf/pull/6998) 为注解 `#[AutoController]` 新增 `defaultMethods` 参数，你可以更加方便的设置 `Options` 方法，便于支持跨域中间件。

# v3.1.35 - 2024-08-08

## 修复

- [#6987](https://github.com/hyperf/hyperf/pull/6987) 修复使用 `Swagger` 服务时，使用根路由会导致报错的问题。

# v3.1.34 - 2024-08-01

## 新增

- [#6978](https://github.com/hyperf/hyperf/pull/6978) 为 `#[AsCommand]` 注解支持 `static` 方法调用。
- [#6979](https://github.com/hyperf/hyperf/pull/6979) 新增命令 `queue:dynamic-reload`。

# v3.1.33 - 2024-07-25

## 优化

- [#6962](https://github.com/hyperf/hyperf/pull/6962) 优化使用 `Command` 时，触发异常时的错误日志展示样式。
- [#6963](https://github.com/hyperf/hyperf/pull/6963) 优化 `Model/JsonResource::toJson` 的代码逻辑。

## 修复

- [#6954](https://github.com/hyperf/hyperf/pull/6954) 修复 `MySQL Server` 在故障转移和读写主机交换的情况下，`MySQL 连接` 无法重新连接到服务器的问题。
- [#6961](https://github.com/hyperf/hyperf/pull/6961) 修复 `websocket sender` 不支持 `Swow` 的问题。

# v3.1.32 - 2024-07-18

## 修复

- [#6949](https://github.com/hyperf/hyperf/pull/6949) 修复因不存在 `.env` 导致热重启失败的问题。
- [#6953](https://github.com/hyperf/hyperf/pull/6953) 修复 `socketio-server` 在 `Swow` 引擎下无法正常使用的问题。

## 优化

- [#6946](https://github.com/hyperf/hyperf/pull/6946) 删除 `watcher` 组件中的 `Swoole Atomic` 依赖。

## 新增

- [#6950](https://github.com/hyperf/hyperf/pull/6950) 为 `database` 组件增加位运算查询支持。

# v3.1.31 - 2024-07-11

## Added

- [#6936](https://github.com/hyperf/hyperf/pull/6936) Support to reload `.env` when using `hyperf/watcher`.

# v3.1.30 - 2024-07-05

## 修复

- [#6925](https://github.com/hyperf/hyperf/pull/6925) 修复 `Collection::sortByMany()` 在新版本会重置索引导致 BC 的问题，但在 v3.2 版本中，将会把 `sortByMany()` 返回结果与 `sortBy()` 一致，即不再会重置索引。

# v3.1.29 - 2024-07-04

## 修复

- [#6925](https://github.com/hyperf/hyperf/pull/6925) 修复方法 `sortByMany` 不支持排序规则的问题。

## 新增

- [#6896](https://github.com/hyperf/hyperf/pull/6896) 为 `hyperf/filesystem` 新增 `SftpAdapter` 适配器。
- [#6917](https://github.com/hyperf/hyperf/pull/6917) 新增方法 `Str::chopStart` 和 `Str::chopEnd`。

# v3.1.28 - 2024-06-27

## 修复

- [#6900](https://github.com/hyperf/hyperf/pull/6900) 修复 `LengthAwarePaginator::addQuery()` 不支持数组类型入参的问题。
- [#6909](https://github.com/hyperf/hyperf/pull/6909) 修复 `Aop` 无法作用于 `Trait` 的问题。

## 优化

- [#6903](https://github.com/hyperf/hyperf/pull/6903) 优化 `config-nacos` 部分代码。

## 新增

- [#6885](https://github.com/hyperf/hyperf/pull/6885) 新增验证器规则 `prohibiti`。
- [#6891](https://github.com/hyperf/hyperf/pull/6891) 为 `hyperf/cache` 组件增加配置项 `cache.*.options.pool` 用于主动选择使用哪个 `Redis` 实例。
- [#6895](https://github.com/hyperf/hyperf/pull/6895) 增加收集枚举类中注解的能力。

# v3.1.27 - 2024-06-20

## 新增

- [#6864](https://github.com/hyperf/hyperf/pull/6864) 为 `Hyperf\Database\Schema\Schema` 新增方法 `getViews` 和 `hasView`。
- [#6866](https://github.com/hyperf/hyperf/pull/6866) 新增方法 `Hyperf\Database\Concerns\BuildsQueries::lazy`。
- [#6869](https://github.com/hyperf/hyperf/pull/6869) 为 `Collection` 新增方法 `before` 和 `after`。
- [#6876](https://github.com/hyperf/hyperf/pull/6876) 新增方法 `Hyperf\Database\Concerns\Builder::eachById`.
- [#6878](https://github.com/hyperf/hyperf/pull/6878) 为 `Hyperf\Database\Model\Concerns\QueriesRelationships` 新增 `whereMorphRelation` 和 `orWhereMorphRelation`。
- [#6883](https://github.com/hyperf/hyperf/pull/6883) 为 `Hyperf\Database\Schema\Builder` 新增方法 `getIndexes` `hasIndex` 和 `getIndexListing`。
- [#6884](https://github.com/hyperf/hyperf/pull/6884) 新增方法 `Hyperf\Database\Model\Model::updateOrFail`.
- [#6897](https://github.com/hyperf/hyperf/pull/6897) [#6899](https://github.com/hyperf/hyperf/pull/6899) 为 `Hyperf\Kafka\ConsumerManager` 新增事件 `BeforeLongLangConsumerCreated` 和 `AfterConsumerConfigCreated`。

## 优化

- [#6829](https://github.com/hyperf/hyperf/pull/6829) 优化 `Command` 的错误输出结构。
- [#6868](https://github.com/hyperf/hyperf/pull/6868) 为 `QueryBuilder::orderBy()` 的 `$column` 参数增加类型 `Closure|Expression|ModelBuilder|static|string` 的支持。
- [#6870](https://github.com/hyperf/hyperf/pull/6870) 统一 `Model Factory` 构造函数中的默认路径。
- [#6874](https://github.com/hyperf/hyperf/pull/6874) 优化 `hyperf/watcher` 组件，使用 `Scanner` 代替硬编码。

# v3.1.26 - 2024-06-13

## 修复

- [#6848](https://github.com/hyperf/hyperf/pull/6848) 修复 `LazyCollection::splitIn()` 因为类型限制导致报错的问题。

## 新增

- [#6845](https://github.com/hyperf/hyperf/pull/6845) 新增方法 `Hyperf\Database\Schema::getTables()`。
- [#6846](https://github.com/hyperf/hyperf/pull/6846) 为 `Hyperf\Database\Concerns\BuildsQueries` 新增方法 `chunkById` 和 `chunkByIdDesc`。
- [#6851](https://github.com/hyperf/hyperf/pull/6851) 为 `Hyperf\Database\Model\Concerns` 新增方法 `orDoesntHaveMorph` 和 `orHasMorph`。
- [#6858](https://github.com/hyperf/hyperf/pull/6858) 为 `Hyperf\Database\Model\Concerns\HidesAttributes` 新增方法 `makeHiddenIf` 和 `makeVisibleIf`。

## 优化

- [#6855](https://github.com/hyperf/hyperf/pull/6855) 使用 `Conditionable` 优化 `BuildsQueries` 中的 `when` 和 `unless` 方法。
- [#6856](https://github.com/hyperf/hyperf/pull/6856) 使用 `Conditionable` 优化 `Hyperf\Scout\Builder` 中的 `when` 和 `unless` 方法。
- [#6860](https://github.com/hyperf/hyperf/pull/6860) 使用 `Hyperf\Collection\Enumerable` 代替 `Hyperf\ViewEngine\Contract\Enumerable`。

# v3.1.25.1 - 2024-06-07

## 新增

- [#6837](https://github.com/hyperf/hyperf/pull/6837) 新增方法 `Model\Concerns\QueriesRelationships::withWhereHas()`。
- [#6844](https://github.com/hyperf/hyperf/pull/6844) 为 `Hyperf\Database\Model\Concerns\QueriesRelationships` 新增方法 `whereRelation` 和 `orWhereRelation`。

## 优化

- [#6843](https://github.com/hyperf/hyperf/pull/6843) [#6847](https://github.com/hyperf/hyperf/pull/6847) 优化 `Collection` 和 `LazyCollection` 部分方法返回值的类型。

# v3.1.25 - 2024-06-06

## 新增

- [#6809](https://github.com/hyperf/hyperf/pull/6809) 为 `hyperf/database` 增加基于 `cursor` 的分页机制。
- [#6811](https://github.com/hyperf/hyperf/pull/6811) 为 `hyperf/validation` 增加验证器规则 `list`。
- [#6814](https://github.com/hyperf/hyperf/pull/6814) 新增方法 `Model::query()->touch()` 用于更新 `updated_at` 数据。
- [#6815](https://github.com/hyperf/hyperf/pull/6815) 新增方法 `Hyperf\Database\Model\Builder::qualifyColumns()`。
- [#6816](https://github.com/hyperf/hyperf/pull/6816) 新增方法 `Hyperf\Database\Model\Builder::load*`。
- [#6820](https://github.com/hyperf/hyperf/pull/6820) 新增方法 `Hyperf\Database\Model\Builder::valueOrFail()`。
- [#6821](https://github.com/hyperf/hyperf/pull/6821) 新增方法 `Hyperf\Database\Concerns\BuildsQueries::chunkMap()`。
- [#6822](https://github.com/hyperf/hyperf/pull/6822) 为 `Lazy Queries` 新增方法 `lazyById` 和 `lazyByIdDesc`。
- [#6825](https://github.com/hyperf/hyperf/pull/6825) 为 `Hyperf\Database\Schmea` 新增方法 `createDatabase` 和 `dropDatabaseIfExists`。

## 修复

- [#6813](https://github.com/hyperf/hyperf/pull/6813) 修复 `Hyperf\Constants\Annotation\Message` 无法使用驼峰 `key` 的问题。
- [#6818](https://github.com/hyperf/hyperf/pull/6818) 修复 `updateOrInsert` 不支持空数据的问题。
- [#6828](https://github.com/hyperf/hyperf/pull/6828) 修复 `AOP` 无法作用于 `__construct` 的问题。
- [#6836](https://github.com/hyperf/hyperf/pull/6836) 修复 `SetCookie::fromString` 无法正常使用的问题。

# v3.1.24 - 2024-05-30

## 修复

- [#6796](https://github.com/hyperf/hyperf/pull/6796) [#6798](https://github.com/hyperf/hyperf/pull/6798) 修复 `Collection::mapInto()` 偶发报错的问题。

## 新增

- [#6792](https://github.com/hyperf/hyperf/pull/6792) 为 `Hyperf\Database\Query\Builder` 增加 `IncrementEach` 和 `DecrementEach` 方法。
- [#6793](https://github.com/hyperf/hyperf/pull/6793) 为 `tracer` 增加 `Request` 和 `Response` 数据。
- [#6795](https://github.com/hyperf/hyperf/pull/6795) 为 `rate-limit` 增加配置 `rate_limit.storage.options.expired_time`。

## 优化

- [#6778](https://github.com/hyperf/hyperf/pull/6788) 为 `Hyperf\Amqp\Annotation\Consumer::routingKey` 增加 `array` 支持。
- [#6799](https://github.com/hyperf/hyperf/pull/6799) 为 `Hyperf\Stringable\Str` 增加 `numbers` 和 `fromBase64` 方法。
- [#6803](https://github.com/hyperf/hyperf/pull/6803) 为 `AsCommand` 和 `ClosureCommand` 取消返回值，避免与 `Command` 冲突。

# v3.1.23 - 2024-05-23

## 新增

- [#6757](https://github.com/hyperf/hyperf/pull/6757) 新增 `Hyperf\Collection\LazyCollection`。
- [#6763](https://github.com/hyperf/hyperf/pull/6763) 当遇到 `Premature end of data` 错误时，则认为当前数据库连接不可用，下次从连接池中取出来时，会被重连。
- [#6767](https://github.com/hyperf/hyperf/pull/6767) 为 `Hyperf\Database\Query\Builder` 新增 `whereAll/orWhereAll` 和 `whereAny/orWhereAny` 方法。
- [#6774](https://github.com/hyperf/hyperf/pull/6774) 为 `Hyperf\Database\Query\Builder` 增加 `Lateral Join` 方法。
- [#6781](https://github.com/hyperf/hyperf/pull/6781) 为 `Hyperf\Collection\Arr` 增加一些新的方法。
- [#6782](https://github.com/hyperf/hyperf/pull/6782) 为 `Hyperf\Database\Query\Builder` 新增 `whereJsonOverlaps`,`orWhereJsonOverlaps` 和 `whereJsonDoesntOverlap` 方法。
- [#6783](https://github.com/hyperf/hyperf/pull/6783) 为 `Hyperf\Database\Query\Builder` 增加 `insertOrIgnoreUsing` 方法。
- [#6784](https://github.com/hyperf/hyperf/pull/6784) 为 `Hyperf\Collection\Collection` 增加 `getOrPut` 和 `getOrSet` 方法。

## 优化

- [#6777](https://github.com/hyperf/hyperf/pull/6777) 优化 `StdoutLogger` 自定义参数的展示样式。
- [#6778](https://github.com/hyperf/hyperf/pull/6778) 使用 `EnumeratesValues` 优化 `Collection`。

# v3.1.22 - 2024-05-16

## 修复

- [#6755](https://github.com/hyperf/hyperf/pull/6755) 修复 `Hyperf\Serializer\ExceptionNormalizer` 不支持 `symfony 7` 的问题。

## 新增

- [#6734](https://github.com/hyperf/hyperf/pull/6734) 为 `AsCommand` 和 `ClosureCommand` 增加更加复杂的可选参数支持。
- [#6746](https://github.com/hyperf/hyperf/pull/6746) 为 `Hyperf\Database\Query\Builder` 增加 `explain()` 方法。
- [#6749](https://github.com/hyperf/hyperf/pull/6749) 为 `hyperf/validation` 增加一部分新的规则。
- [#6752](https://github.com/hyperf/hyperf/pull/6752) 为 `Hyperf\Database\Seeders\Seed` 增加 `path` 和 `paths` 方法。

# v3.1.21 - 2024-05-09

## 新增

- [#6738](https://github.com/hyperf/hyperf/pull/6738) 为 `Hyperf\Collection\Collection` 增加 `unshift` 方法。
- [#6740](https://github.com/hyperf/hyperf/pull/6740) 为 `Hyperf\Database\Query\Builder` 增加 `useIndex` `forceIndex` 和 `ignoreIndex`。

## 优化

- [#6716](https://github.com/hyperf/hyperf/pull/6716) [#6717](https://github.com/hyperf/hyperf/pull/6717) 优化 `AMQP` 消费者启动时，声明交换机的逻辑。
- [#6721](https://github.com/hyperf/hyperf/pull/6721) 优化了 `Collection` 中的 `when` 方法。
- [#6731](https://github.com/hyperf/hyperf/pull/6731) 优化 `Hyperf\Testing\Concerns\InteractsWithModelFactory` 代码，避免因为 `hyperf/database` 没有引入时会报错的问题。

## 修复

- [#6728](https://github.com/hyperf/hyperf/pull/6728) 修复 `hyperf/watch` 组件在 `hyperf/constants` 开启枚举模式时，会无法正常使用的问题。

# v3.1.20 - 2024-04-26

## 新增

- [#6709](https://github.com/hyperf/hyperf/pull/6709) 为 `RPC` 服务增加默认的 `onClose` 方法可供使用。
- [#6712](https://github.com/hyperf/hyperf/pull/6712) 为 `Hyperf\Collection\Collection` 增加新的方法。

## 优化

- [#6700](https://github.com/hyperf/hyperf/pull/6700) 优化了 `Pluralizer` 的代码实现。

# v3.1.19 - 2024-04-18

## 修复

- [#6689](https://github.com/hyperf/hyperf/pull/6689) 修复 `Socket-IO` 服务无法正常解析没有 `query` 但是 `data` 中携带 `?` 的数据。
- [#6697](https://github.com/hyperf/hyperf/pull/6697) 修复使用 `Swow` 引擎时，`Request` 和 `Response` 的 `toString()` 方法无法正常使用 `withoutBody` 参数的问题。

## 新增

- [#6680](https://github.com/hyperf/hyperf/pull/6680) 为 `Hyperf\Coordinator` 增加了一些常用的助手函数。
- [#6681](https://github.com/hyperf/hyperf/pull/6681) 为 `gen:constant` 脚本增加 `type` 选项，可以用于生成 `const` 或者 `enum` 两种不同写法的 `常量/枚举` 类。

## 优化

- [#6686](https://github.com/hyperf/hyperf/pull/6686) 优化 `FswatchDriver` 读到空字符串时，会盲目重启的情况。
- [#6698](https://github.com/hyperf/hyperf/pull/6698) 升级 `hyperf/engine` 版本到 `v2.11`。
- [#6696](https://github.com/hyperf/hyperf/pull/6696) 使用 `AMQP` 时，消息生产者可以不再必须配置 `Producer` 注解。

# v3.1.18 - 2024-04-12

## 新增

- [#6674](https://github.com/hyperf/hyperf/pull/6674) 为 `Redis` 连接池增加 `getConfig()` 方法。

## 修复

- [#6664](https://github.com/hyperf/hyperf/pull/6664) 修复使用 `isset` 判断 `Hyperf\Collection\Collection` 中某个 `key` 时，无法正确处理 `null` 的问题。

## 优化

- [#6668](https://github.com/hyperf/hyperf/pull/6668) 优化多路复用 `RPC` 组件的错误捕获器，避免接口文件出错时，无法得到相应错误的问题。

# v3.1.17 - 2024-04-10

## 新增

- [#6652](https://github.com/hyperf/hyperf/pull/6652) 新增 `Str::trim` 方法。
- [#6658](https://github.com/hyperf/hyperf/pull/6658) 当接收到 `HEAD` 请求时，若不存在当前路由，则尝试从 `GET` 方法中读取中间件（因为在 fast-route 组件中，存在没有 `HEAD` 路由会尝试寻找 `GET` 路由的情况）。
- [#6665](https://github.com/hyperf/hyperf/pull/6665) 当使用 `Websocket` 时，记录读取数据的错误日志。

# 变更

- [#6661](https://github.com/hyperf/hyperf/pull/6661) 在使用 `hyperf/watcher` 时，使用 `PHP_BINARY` 替代 `php` 作为默认的 2 进制命令。

# v3.1.16 - 2024-04-02

## 新增

- [#6632](https://github.com/hyperf/hyperf/pull/6632) 为 `websocket-client` 增加设置 `headers` 的能力。
- [#6648](https://github.com/hyperf/hyperf/pull/6648) 使用 `WebSocket` 组件的 `Sender::push()` 和 `Sender::disconnect` 时，增加 `bool` 类型的返回值。

## 修复

- [#6633](https://github.com/hyperf/hyperf/pull/6633) 修复定时任务会偶发跳过某些任务，不执行的问题。
- [#6635](https://github.com/hyperf/hyperf/pull/6635) 修复 `ConsumerMessage::getQueue` 的返回类型。

## 优化

- [#6640](https://github.com/hyperf/hyperf/pull/6640) 为 `hyperf/constants` 增加 PHP8 注解的支持。

# v3.1.15 - 2024-03-28

## 新增

- [#6613](https://github.com/hyperf/hyperf/pull/6613) 为 `hyperf/pool` 组件在回收链接时，增加 `ReleaseConnection` 事件。

## 优化

- [#6616](https://github.com/hyperf/hyperf/pull/6616) [#6617](https://github.com/hyperf/hyperf/pull/6617) 使用最新 `cs-fixer` 版本进行代码格式化。

## 即将废弃

- [#6621](https://github.com/hyperf/hyperf/pull/6621) 标记 `WebSocketHandeShakeException` 为即将废弃, 请使用 `WebSocketHandShakeException`。

# v3.1.14 - 2024-03-21

## 修复

- [#6609](https://github.com/hyperf/hyperf/pull/6609) 修复当 `scan` 配置不存在时，会清空整个配置的问题。

## Added

- [#6594](https://github.com/hyperf/hyperf/pull/6594) 新增 `hyperf/carbon` 组件。

## Optimized

- [#6600](https://github.com/hyperf/hyperf/pull/6600) 优化 `AMQP` 组件，在进程退出时，不再记录警告日志。
- [#6608](https://github.com/hyperf/hyperf/pull/6608) 优化 `CacheAheadAspect`，使其在子协程中同步缓存，不会阻塞当前协程。

# v3.1.13 - 2024-03-14

## 新增

- [#6576](https://github.com/hyperf/hyperf/pull/6576) 新增 `Hyperf\Stringable\Str::apa()` 方法。
- [#6577](https://github.com/hyperf/hyperf/pull/6577) 在 `Command` 执行前，自动装载符合命名规则的 `traits`。
- [#6579](https://github.com/hyperf/hyperf/pull/6579) 为 `hyperf/support` 组件新增 `now()` 和 `today()` 方法。
- [#6590](https://github.com/hyperf/hyperf/pull/6590) 为 `MigrateCommand` 增加 `--graceful` 选项。

## 修复

- [#6593](https://github.com/hyperf/hyperf/pull/6593) 修复注解 `AsCommand` 无法正常工作的问题。

# v3.1.12 - 2024-03-07

## 修复

- [#6569](https://github.com/hyperf/hyperf/pull/6569) 修复使用 `http2-client` 组件时，当读取超时，`channel` 被移除后，会导致报错的问题。
- [#6561](https://github.com/hyperf/hyperf/pull/6561) 修复使用 `gen:model` 创建模型时，模型关系注释会生成失败的问题。
- [#6566](https://github.com/hyperf/hyperf/pull/6566) 修复使用 `$request->all()` 读取所有入参时，数字类型的 `key` 值会被重置的问题。
- [#6567](https://github.com/hyperf/hyperf/pull/6567) 修复监听器 `CrontabRegisterListener` 不会主动检查 `crontab.enable` 配置。

# v3.1.11 - 2024-03-01

## 修复

- [#6555](https://github.com/hyperf/hyperf/pull/6555) 修复使用非 `string` 参数时，数据库组件中 `invalidOperator` 方法会报错的问题。
- [#6563](https://github.com/hyperf/hyperf/pull/6563/files) 修复定时任务睡眠间隔会偶发出现跳秒的问题。

## 新增

- [#6550](https://github.com/hyperf/hyperf/pull/6550) 为 `hyperf/opentracing` 增加 `noop` 适配器。
- [#6562](https://github.com/hyperf/hyperf/pull/6562) 为 `hyperf/cache` 组件增加 `SqliteDriver` 适配器。

## 优化

- [#6556](https://github.com/hyperf/hyperf/pull/6556) 在数据库组件时，允许为模型参数复制表达式。**_但这不是一个标准用法，尽量不要使用_**

# v3.1.10 - 2024-02-23

## 新增

- [#6542](https://github.com/hyperf/hyperf/pull/6542) 为 `hyperf/cache` 新增内存缓存驱动 `MemoryDriver`。
- [#6533](https://github.com/hyperf/hyperf/pull/6533) 新增 `database-sqlite` 组件。

## 优化

- [#6539](https://github.com/hyperf/hyperf/pull/6539) 为 `retry` 方法，增加支持手动设置，每次重试时延时时长的功能。

# v3.1.9 - 2024-02-18

## 修复

- [#6482](https://github.com/hyperf/hyperf/pull/6482) 修复使用验证器组件时，`decimal` 规则无法与 `size` 配合使用的问题。

## 新增

- [#6518](https://github.com/hyperf/hyperf/pull/6518) 为 `AMQP` 的事件消息，统一增加 `AmqpMessage` 参数。
- [#6526](https://github.com/hyperf/hyperf/pull/6526) 为 `Crontab` 增加 `Conditionable` trait。

## 优化

- [#6517](https://github.com/hyperf/hyperf/pull/6517) 修复 `async-queue` 组件，消息结构无法兼容老版本的问题。
- [#6520](https://github.com/hyperf/hyperf/pull/6520) 使用 `logger` 组件时，优化 `UdpSocketAspect` 的协程处理功能。

# v3.1.8 - 2024-02-01

## 修复

- [#6509](https://github.com/hyperf/hyperf/pull/6509) 修复 `Crontab` 组件的 `Schedule::call()` 方法不支持 `array` 参数的问题。

## 优化

- [#6511](https://github.com/hyperf/hyperf/pull/6511) 优化异步队列消息体结构 `Hyperf\AsyncQueue\JobMessage`。

## 新增

- [#6504](https://github.com/hyperf/hyperf/pull/6504) 为 `rpc-multiplex` 组件增加 `HostReaderInterface` 支持，允许用户自定义协议 `Host`。

# v3.1.7 - 2024-01-26

## 修复

- [#6491](https://github.com/hyperf/hyperf/pull/6491) 修复 Swagger 参数验证器无法正常收集 `query` 参数验证规则的问题。
- [#6500](https://github.com/hyperf/hyperf/pull/6500) 修复单独使用多路复用客户端时，无法正常解析返回值的问题。（正常使用多路复用组件的不受影响）

## 新增

- [#6483](https://github.com/hyperf/hyperf/pull/6483) [#6487] (https://github.com/hyperf/hyperf/pull/6487) 为 Crontab 的注册，增加了新的方式。
- [#6488](https://github.com/hyperf/hyperf/pull/6488) 为 `Psr\Log\LoggerInterface` 接口增加默认的实现类。
- [#6495](https://github.com/hyperf/hyperf/pull/6495) 为 `closure-command` 增加执行 `Crontab` 的支持。
- [#6501](https://github.com/hyperf/hyperf/pull/6501) 新增 `Collection::replace()` 和 `Collection::replaceRecursive()`。

## 优化

- [#6480](https://github.com/hyperf/hyperf/pull/6480) 当 `Crontab` 的任务跳过时，优化日志格式。
- [#6489](https://github.com/hyperf/hyperf/pull/6489) 移出旧版本 `php` 和 `swoole` 的判断。

# v3.1.6 - 2024-01-18

## 新增

- [#6449](https://github.com/hyperf/hyperf/pull/6449) 新增方法 `ReflectionManager::getAllClassesByFinder`。
- [#6468](https://github.com/hyperf/hyperf/pull/6468) 为 `Crontab` 增加环境变量限制。
- [#6471](https://github.com/hyperf/hyperf/pull/6471) 新增方法 `Arr::remove`。
- [#6474](https://github.com/hyperf/hyperf/pull/6474) 新增方法 `Crontab::setOptions()` 和 `Crontab::getOptions()`。

## 优化

- [#6440](https://github.com/hyperf/hyperf/pull/6440) 优化代码 `Hyperf\SocketIOServer\Parser\Decoder::decode()`。
- [#6472](https://github.com/hyperf/hyperf/pull/6472) 优化代码 `DispatcherFactory`，当读取路由时，使用 `require` 代替 `require_once`。
- [#6473](https://github.com/hyperf/hyperf/pull/6473) 执行 `gen:swagger-schema` 脚本时，自动生成对应的文件夹。
- [#6477](https://github.com/hyperf/hyperf/pull/6477) 为 `Crontab` 优化 `serverMutex` 和 `taskMutex` 的绑定逻辑。

# v3.1.5 - 2024-01-04

## 修复

- [#6423](https://github.com/hyperf/hyperf/pull/6423) 修复定时任务的时区无法正常使用的问题。
- [#6436](https://github.com/hyperf/hyperf/pull/6436) 修复 `AMQP` 消费者生成脚本无法生成正确文件的问题。

## 新增

- [#6431](https://github.com/hyperf/hyperf/pull/6431) 新增监听器 `UnsetContextInTaskWorkerListener` 可以有效防止使用非协程化的 Task 进程时，数据库链接被复制的问题。

## 优化

- [#6435](https://github.com/hyperf/hyperf/pull/6435) [#6437](https://github.com/hyperf/hyperf/pull/6437) 优化模型生成器，可以根据模型内 `use` 代码块，为模型字段生成匹配的注释。

# v3.1.4 - 2023-12-29

## 修复

- [#6419](https://github.com/hyperf/hyperf/pull/6419) 修复使用熔断器时，`prepareHandler` 有时无法正常解析待执行方法的问题。

## 新增

- [#6426](https://github.com/hyperf/hyperf/pull/6426) 新增注解 `RewriteReturnType`，可以用来修改 `gen:model` 生成模型后，参数注释的返回值类型。

## Optimized

- [#6415](https://github.com/hyperf/hyperf/pull/6415) 当使用 `Base62::decode` 反序列化空字符串时，抛出异常 `InvalidArgumentException` 而不是 `TypeError`。

# v3.1.3 - 2023-12-21

## 修复

- [#6389](https://github.com/hyperf/hyperf/pull/6389) 修复使用 `scout` 组件时，在索引设置为 `Null` 的情况下，无法正常读取 `Elasticsearch` 服务的版本号的问题。
- [#6406](https://github.com/hyperf/hyperf/pull/6406) 修复 `Hyperf\Scout\Searchable` 没有正确引入 `config` 方法命名空间的问题。

## 新增

- [#6398](https://github.com/hyperf/hyperf/pull/6398) 为 `hyperf/crontab` 组件中的每一个任务，增加设置时区的能力。
- [#6402](https://github.com/hyperf/hyperf/pull/6402) 为 `twig` 模板引擎，增加 `template_suffix` 配置。

# v3.1.2 - 2023-12-15

## 修复

- [#6372](https://github.com/hyperf/hyperf/pull/6372) 修复使用动态参数时，AOP 无法正常使用的问题。
- [#6374](https://github.com/hyperf/hyperf/pull/6374) 修复使用 `rate_limit.storage` 配置时，`RateLimitAnnotationAspect::getWeightingAnnotation()` 无法正常使用的问题。
- [#6384](https://github.com/hyperf/hyperf/pull/6384) 修复使用 `Elasticsearch` v7 以下版本且没有指定索引时，`scout` 组件无法正常使用的问题。

## 新增

- [#6357](https://github.com/hyperf/hyperf/pull/6357) 为 `command` `config` `devtool` `di` 和 `server` 组件增加 `symfony` 7.x 版本的支持。
- [#6373](https://github.com/hyperf/hyperf/pull/6373) 为 `GRPC` 客户端增加 `ping` 方法。
- [#6379](https://github.com/hyperf/hyperf/pull/6379) 为 `swagger` 组件增加自定义 `attribute` 的能力。
- [#6380](https://github.com/hyperf/hyperf/pull/6380) 为 `swagger` 组件增加支持收集 `mediaType` 类型验证规则的能力。

## 优化

- [#6376](https://github.com/hyperf/hyperf/pull/6376) 当没有安装 `Swoole` 扩展或没有安装 `hyperf/polyfill-coroutine` 组件的情况下，允许开发者开启 Swoole 短名功能。

# v3.1.1 - 2023-12-08

## 修复

- [#6347](https://github.com/hyperf/hyperf/pull/6347) 修复 `view()` 方法会增加多余的 `content-type` 的问题。
- [#6352](https://github.com/hyperf/hyperf/pull/6352) 修复使用 `grpc` 协议的 `nacos` 配置中心时，无法正常使用的问题。
- [#6350](https://github.com/hyperf/hyperf/pull/6350) 修复因 `GrpcClient::runReceiveCoroutine` 会在 `recv` 前删除 `recv channel`，导致其无法在后续中被使用的问题。
- [#6361](https://github.com/hyperf/hyperf/pull/6361) 修复 `Hyperf\SocketIOServer\Emitter\Future` 无法被实例化的问题。

## 新增

- [#6342](https://github.com/hyperf/hyperf/pull/6342) 增加 `Coroutine::fork()` 和 `Coroutine::pid()` 方法。
- [#6360](https://github.com/hyperf/hyperf/pull/6360) 为 `swagger` 服务增加 `content-type`。
- [#6363](https://github.com/hyperf/hyperf/pull/6363) 为熔断器的 `fallback` 参数，增加 `callable` 类型的支持。

# v3.1.0 - 2023-12-01

## 依赖库升级

我们对主要的几个依赖已经了升级

- 提高 `PHP` 最低支持版本为 `8.1`。
- 提高 `Swoole` 最低支持版本为 `5.0`。
- 提高 `hyperf/engine` 最低版本为 `2.0`。
- 提高 `PHPUnit` 最低支持版本为 `10.0`。

## Swow 支持

- [#5843](https://github.com/hyperf/hyperf/pull/5843) 为 `reactive-x` 增加 `Swow` 支持。
- [#5844](https://github.com/hyperf/hyperf/pull/5844) 为 `socketio-server` 增加 `Swow` 支持。

## 新增

- [x] 增加 [Psr7Plus](https://github.com/swow/psr7-plus) 支持。
- [x] 增加 [pest](https://github.com/pestphp/pest) 支持。
- [x] 新增 `hyperf/helper` 组件。
- [x] 新增 `hyperf/polyfill-coroutine` 组件。
- [#5815](https://github.com/hyperf/hyperf/pull/5815) 对 `hyperf/db` 组件，增加了 `pdo` 引擎别名 `mysql`。
- [#5849](https://github.com/hyperf/hyperf/pull/5849) 支持数据库操作时，使用枚举进行更新和插入操作。
- [#5894](https://github.com/hyperf/hyperf/pull/5894) [#5897](https://github.com/hyperf/hyperf/pull/5897) 为单元测试组件，增加了 `model-factory` 支持。
- [#5898](https://github.com/hyperf/hyperf/pull/5898) 为数据库组件增加 `toRawSql()` 方法。
- [#5906](https://github.com/hyperf/hyperf/pull/5906) 为数据库组件增加 `getRawQueryLog()` 方法。
- [#5915](https://github.com/hyperf/hyperf/pull/5915) 新增助手函数 `data_forget`。
- [#5914](https://github.com/hyperf/hyperf/pull/5914) 新增方法 `Str::isUrl()`。
- [#5918](https://github.com/hyperf/hyperf/pull/5918) 新增方法 `Arr::isList()`。
- [#5925](https://github.com/hyperf/hyperf/pull/5925) [#5926](https://github.com/hyperf/hyperf/pull/5926) 为数据库组件的模型，增加自定义为枚举的支持。
- [#5930](https://github.com/hyperf/hyperf/pull/5930) [#5934](https://github.com/hyperf/hyperf/pull/5934) 新增 `AsCommand` 注解和 `ClosureCommand`。
- [#5950](https://github.com/hyperf/hyperf/pull/5950) 为 `hyperf/async-queue` 组件新增 `Job::setMaxAttempts` 方法和 `dispatch` 方法。
- [#5983](https://github.com/hyperf/hyperf/pull/5983) [#5985](https://github.com/hyperf/hyperf/pull/5985) 为 `hyperf/cache` 的注解增加 `skipCacheResults` 参数，用于跳过缓存阶段。
- [#5994](https://github.com/hyperf/hyperf/pull/5994) 为 `Crontab` 增加生命周期事件。
- [#6039](https://github.com/hyperf/hyperf/pull/6039) 为 `Crontab` 增加语义化的规则设置。
- [#6082](https://github.com/hyperf/hyperf/pull/6082) 新增 `hyperf/stdlib` 组件。
- [#6085](https://github.com/hyperf/hyperf/pull/6085) 为数据库组件的 `Connection` 增加一个错误数量，确保当出现多次错误时，会在下次重新连接。
- [#6106](https://github.com/hyperf/hyperf/pull/6106) 新增了部分验证器规则。
- [#6124](https://github.com/hyperf/hyperf/pull/6124) 新增方法 `Hyperf\AsyncQueue\Job::fail()`。
- [#6259](https://github.com/hyperf/hyperf/pull/6259) 为 `Hyperf\Database\Query\Builder\addSelect` 增加使用 `QueryBuilder` 的支持。
- [#6301](https://github.com/hyperf/hyperf/pull/6301) 为限流器组件，增加自定义设置存储器的能力。

## 优化

- [x] 将 `Prometheus` 组件库从默认依赖改为建议。
- [#5586](https://github.com/hyperf/hyperf/pull/5586) 为 `Nacos` 服务注册与发现，增加 `GRPC` 能力。
- [#5866](https://github.com/hyperf/hyperf/pull/5866) 在特别场景，使用 `StrCache` 代替 `Str`，减少 CPU 开销，优化性能。
- [#5872](https://github.com/hyperf/hyperf/pull/5872) 使用负载均衡组件时，避免因频繁调用 `refresh()` 方法，导致会执行多次回调函数的问题。
- [#5879](https://github.com/hyperf/hyperf/pull/5879) [#5878](https://github.com/hyperf/hyperf/pull/5878) 为 `Command` 组件，增加了一些新特性。
- [#5901](https://github.com/hyperf/hyperf/pull/5901) 优化 `RPC` 协议，让 `id` 同时支持 string 和 int 两种类型。
- [#5905](https://github.com/hyperf/hyperf/pull/5905) 为 `Collection::forget` 入参，增加更多类型支持。
- [#5917](https://github.com/hyperf/hyperf/pull/5917) 优化 `Str::isUrl()` 方法。
- [#5920](https://github.com/hyperf/hyperf/pull/5920) 将所有存在 `__toString()` 方法的类，增加 `\Stringable` 接口。
- [#5945](https://github.com/hyperf/hyperf/pull/5945) 使用 `Apollo` 配置中心时，避免因为监听多个命名空间，导致频繁更新配置的问题。
- [#5948](https://github.com/hyperf/hyperf/pull/5948) 优化 `Hyperf\Coroutine\Locker` 的实现。
- [#5960](https://github.com/hyperf/hyperf/pull/5960) 为 `amqp` 组件的注解，增加 `poolName` 参数。
- [#5972](https://github.com/hyperf/hyperf/pull/5972) 使用 `Collection::except()` 方法时，如果传入的 key 为 null，则默认返回所有数据。
- [#5973](https://github.com/hyperf/hyperf/pull/5973) 简化 `logger` 组件 `handlers` 的定义。
- [#6010](https://github.com/hyperf/hyperf/pull/6010) 使用数据库组件时，如果配置的自定义转化器不存在，则抛出错误。
- [#6030](https://github.com/hyperf/hyperf/pull/6030) 为 `metric` 的独立进程收集模式，增加一种新的收集机制，减少进程间通信次数。
- [#6131](https://github.com/hyperf/hyperf/pull/6131) 当 `Crontab` 的实际执行单元为 Null 时，抛出异常。
- [#6172](https://github.com/hyperf/hyperf/pull/6172) 优化 `ProcessManager` 使其 `running` 状态更加清晰。
- [#6184](https://github.com/hyperf/hyperf/pull/6184) 当时用协程风格时，为 `SafeSocket` 增加日志配置。
- [#6247](https://github.com/hyperf/hyperf/pull/6247) 你可以从 `BadRequestHttpException` 中获取原始数据。
- [#6338](https://github.com/hyperf/hyperf/pull/6338) 为 `swagger` 组件新增配置项 `processors`，用户可以追加自定义的 `swagger` 处理器。

## 移除

- [x] 从 `hyperf/utils` 中移出无用的代码。
- [x] 移除 `setAccessible` 方法调用，因为 PHP8.1 版本开始已经默认。
- [x] 移除其他废弃的方法。
- [#5813](https://github.com/hyperf/hyperf/pull/5813) 不再支持 swoole 4.x 版本。
- [#5859](https://github.com/hyperf/hyperf/pull/5859) 默认移除 `Hyperf\Stringable\Str` 中的缓存逻辑。
- [#6040](https://github.com/hyperf/hyperf/pull/6040) 移出 `Hyperf\Di\Annotation\AbstractAnnotation` 中废弃的代码。
- [#6043](https://github.com/hyperf/hyperf/pull/6043) 移出废弃的 `Hyperf\Coroutine\Traits\Container`。
- [#6244](https://github.com/hyperf/hyperf/pull/6244) 移出废弃的组件 `swoole-tracker`。

## 变更

- 使用 Redis 组件时，如果设置了错误的 `option`，则抛出异常。
- [#5847](https://github.com/hyperf/hyperf/pull/5847) 变更 `metric` 组件默认的 `Redis` key 值。
- [#5943](https://github.com/hyperf/hyperf/pull/5943) 使用 `JSON RPC` 功能时，若使用 `HTTP` 协议，不再因为 `HTTP 码` 非 `200` 时，移出对应的节点。
- [#5961](https://github.com/hyperf/hyperf/pull/5961) 对于 `Hyperf\Amqp\Result` 和 `Hyperf\Amqp\Message\Type` 使用枚举替代常量。
- [#6022](https://github.com/hyperf/hyperf/pull/6022) 当使用 `Base62::decode` 反序列化不正确的数据时，会抛出 `InvalidArgumentException` 而非 `TypeError`。
- [#6128](https://github.com/hyperf/hyperf/pull/6128) 当使用多层级目录 `hyperf/config` 时，可以使用 `config('a.c')` 读取 `autoload/a/c.php` 中的数据。

## 修复

- [#5771](https://github.com/hyperf/hyperf/pull/5771) 修复 `Model::updateOrInsert` 返回值不是 `boolean` 的问题。
- [#6033](https://github.com/hyperf/hyperf/pull/6033) 修复`RequestContext` 和 `ResponseContext` 无法读取其他协程的数据的问题。
- [#6056](https://github.com/hyperf/hyperf/pull/6056) 修复 `Hyperf\HttpServer\Request::hasFile()` 不支持 `Swow` 的问题。
- [#6260](https://github.com/hyperf/hyperf/pull/6260) 修复 `LoadBalancerInterface::refresh()` 中无法正常使用日志的问题。

## 即将废弃

- `Hyperf\DB\PgSQL\PgSQLConnection::str_replace_once` 设为即将废弃方法, 请使用 `Hyperf\DB\PgSQL\PgSQLConnection::strReplaceOnce`。
- `Hyperf\Database\PgSQL\PostgreSqlSwooleExtConnection::str_replace_once` 设为即将废弃方法，请使用 `Hyperf\Database\PgSQL\PostgreSqlSwooleExtConnection::strReplaceOnce`。
