> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026 年 10 月 Laravel 更新

> 2026 年 10 月 Laravel 13 与官方产品的更新。汇总 QUERY 路由、副本读取过期的对策、计划任务的单服务器执行、Fake 的验证、Cloud 的 Resend 集成以及 Forge 的 PHP 更新通知。

2026 年 10 月新增了一些功能，用于控制请求的表达方式、数据库的读取目标，以及在多台服务器上执行计划任务。Laravel Cloud 简化了邮件发送和定时执行的配置，Forge 则让 PHP 安全更新和预配失败更容易掌握。

本页是基于 11 月 4 日发布的官方博客「Laravel October Product Updates」以及官方 Framework Changelog 10 月部分整理的月度记录。一手资料于 2026 年 11 月 7 日确认，Framework 部分仅涵盖 Laravel 13 系列。不包含 11 月的发布。

参考出处：

* [Laravel October Product Updates](https://laravel.com/blog/laravel-october-product-updates)
* [Laravel Framework changelog — October 2026](https://laravel.com/framework/docs/changelog#log-2026-10)
* [Laravel Framework changelog RSS](https://laravel.com/rss/oss-changelog)

## Laravel Framework

### 10 月的发布范围

除官方 Changelog 中的主要新功能外，还根据发布说明确认了日期和引入版本。

| 发布 | 发布日期 | 主要变更 |
| - | - | - |
| [v13.35.0](https://github.com/laravel/framework/releases/tag/v13.35.0) | 10 月 6 日 | Fake 的属性验证、按比例指定 worker 内存、Markdown 响应、`alwaysOnOneServer()`、QUERY 路由。 |
| [v13.36.0](https://github.com/laravel/framework/releases/tag/v13.36.0) | 10 月 13 日 | Vitess 的 OLAP 执行、为现有验证规则添加 Builder。 |
| [v13.37.0](https://github.com/laravel/framework/releases/tag/v13.37.0) | 10 月 16 日 | `Rule::numeric()` 的 strict 选项、修复同时使用 `onOneServer()` 与 `withoutOverlapping()` 时的竞争。 |
| [v13.38.0](https://github.com/laravel/framework/releases/tag/v13.38.0) | 10 月 20 日 | `PreventStaleDatabaseReads`、`Connection::usingWritePdo()`。 |
| [v13.39.0](https://github.com/laravel/framework/releases/tag/v13.39.0) | 10 月 27 日 | `RefreshDatabase` 在测试后回滚所有事务层级、修复 `assertSeeText('0')` 错误通过的问题。 |

下面详细介绍官方 Changelog 中列出的 9 个项目。细小的修复和依赖变更请参阅各发布说明。

### 使用 QUERY 路由定义带请求体的搜索

v13.35.0 新增了对应 HTTP `QUERY` 方法的 `Route::query()`。可以定义通过请求体而不是 GET 查询字符串接收搜索条件的路由。

```php theme={null}
use App\Http\Controllers\SearchProductsController;
use Illuminate\Support\Facades\Route;

Route::query('/products/search', SearchProductsController::class);
```

`Route::any()` 也会匹配 QUERY 请求，路由列表也能识别该方法。上面的 `SearchProductsController` 假定为应用中实现了搜索处理的 Invokable Controller。

> [!WARNING]
>
> `web` 中间件组中的 QUERY 路由会进行 CSRF 验证。不要认为「既然是搜索，就可以像 GET 一样省略验证」，请发送 CSRF 令牌。

一手资料：[Register QUERY Routes](https://laravel.com/framework/docs/changelog#october-2026-register-query-routes)、[Laravel 13 官方 routing.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/routing.md#available-router-methods)。相关页面：[路由](https://kawax.biz/zh-CN/routing.md)、[CSRF 保护](https://kawax.biz/zh-CN/csrf.md)

### 在写入后的其他请求中也避免读取过期数据

在读写分离的数据库中，更新后立即进行的读取可能会发往尚未同步的 Read replica。现有的 `sticky` 设置只针对同一请求内，而 v13.38.0 的 `PreventStaleDatabaseReads` 会为同一会话的后续请求也设置保护期。

在 `bootstrap/app.php` 中 import `Illuminate\Foundation\Http\Middleware\PreventStaleDatabaseReads`，并在 `withMiddleware()` 的回调中通过 `$middleware->web(append: [PreventStaleDatabaseReads::class]);` 添加。该功能不会自动启用。

中间件会把对默认数据库连接的写入时间记录到会话中，默认在写入后的 2 秒内将该连接的读取发往 Write DB。可以把注册的类换成 `PreventStaleDatabaseReads::for(5)` 等来修改保护期。

```mermaid theme={null}
sequenceDiagram
    participant User as 用户
    participant App as Laravel<br>应用
    participant Session as 会话
    participant Write as Write DB
    participant Read as Read replica
    User->>App: 更新请求
    App->>Write: 写入数据
    App->>Session: 记录写入时间
    User->>App: 同一会话的下一个请求
    App->>Session: 确认写入后经过的时间
    alt 在 2 秒保护期内
        App->>Write: 读取数据
    else 保护期之后
        App->>Read: 使用常规读取目标
    end
```

由于使用会话，它必须在 `StartSession` 之后执行。它不会切换其他会话或其他数据库连接的读取，也不会检测副本是否已完成同步。

一手资料：[Avoid Stale Reads After Database Writes](https://laravel.com/framework/docs/changelog#october-2026-avoid-stale-reads-after-database-writes)、[Laravel 13 官方 database.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#preventing-stale-database-reads)。相关页面：[数据库](https://kawax.biz/zh-CN/database.md)、[会话](https://kawax.biz/zh-CN/session.md)

### 仅让特定处理从 Write DB 读取

同样在 v13.38.0 中新增的 `Connection::usingWritePdo()` 只在回调执行期间将该连接的读取目标切换到 Write DB。它不是按会话进行保护，适用于想在应用中明确指定重要读取范围的场景。

```php theme={null}
use Illuminate\Support\Facades\DB;

$users = DB::connection()->usingWritePdo(
    fn ($connection) => $connection->table('users')->get()
);
```

它同样适用于使用同一连接的 Eloquent 查询和关联查询。它会返回回调的结果，即使发生异常也会恢复之前的读取设置，因此切换不会残留到后续处理中。

一手资料：[Temporarily Read from the Write Database Connection](https://laravel.com/framework/docs/changelog#october-2026-temporarily-read-from-the-write-database-connection)、[Laravel 13 官方 database.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#using-the-write-connection-for-reads)

### 统一将计划任务设置为单服务器执行

为了减少在多台服务器上运行调度器时遗漏为每个任务指定 `onOneServer()` 的情况，v13.35.0 新增了 `Schedule::alwaysOnOneServer()`。在 `AppServiceProvider` 的 `boot()` 中调用，即可一次性应用到相关的计划任务。

```php theme={null}
use Illuminate\Support\Facades\Schedule;

Schedule::alwaysOnOneServer();
```

这是一个只有调用后才会生效的默认值。没有名称的计划闭包不在适用范围内，仍会在每台服务器上运行。

> [!NOTE]
>
> `onOneServer()` 需要所有服务器共享的中央缓存。官方文档列出的支持驱动为 `database`、`memcached`、`dynamodb` 和 `redis`。仅添加该设置并不会提供跨服务器的锁基础设施。

一手资料：[Run Scheduled Tasks on One Server by Default](https://laravel.com/framework/docs/changelog#october-2026-run-scheduled-tasks-on-one-server-by-default)、[Laravel 13 官方 scheduling.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/scheduling.md#running-tasks-on-one-server)。相关页面：[任务调度](https://kawax.biz/zh-CN/scheduling.md)

### 在 Fake 中指定属性来验证分发

从 v13.35.0 起，可以向 Queue、Bus、Event、Notification 的 Fake 传入期望属性的数组。不再需要为了简单的属性比较而每次都编写回调。

例如，使用带有公开 `order` 属性的 `ShipOrder` 任务和测试中准备的 `$order` 时，可以这样验证：

```php theme={null}
use App\Jobs\ShipOrder;
use Illuminate\Support\Facades\Queue;

Queue::fake();

ShipOrder::dispatch($order);

Queue::assertPushed(ShipOrder::class, ['order' => $order]);
```

指定的属性必须全部一致。值会进行严格比较，但 Eloquent 模型使用 `is()` 比较，因此表示同一模型的不同实例也能匹配。Fake 验证的是分发，而不是任务本身的执行结果。

一手资料：[Assert Fake Dispatches by Their Properties](https://laravel.com/framework/docs/changelog#october-2026-assert-fake-dispatches-by-their-properties)、[Laravel 13 官方 queues.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/queues.md#testing)。相关页面：[队列](https://kawax.biz/zh-CN/queues.md)、[模拟](https://kawax.biz/zh-CN/mocking.md)

### 按比例指定 worker 的内存上限

从 v13.35.0 起，`queue:work` 的 `--memory` 可以指定相对于 PHP `memory_limit` 的比例。无需为每个环境重新计算固定的 MB 值，就能按照 PHP 设置调整 worker 的退出阈值。

```shell theme={null}
php artisan queue:work --memory=60%
```

这不是相对于主机或容器总内存的比例。当 PHP 的 `memory_limit` 为无限制的 `-1` 时，请使用 MB 值而不是比例。因达到阈值而退出的 worker 的重启，交由 Supervisor 等进程监控负责。

一手资料：[Set Queue Worker Memory Limits as Percentages](https://laravel.com/framework/docs/changelog#october-2026-set-queue-worker-memory-limits-as-percentages)、[Laravel 13 官方 queues.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/queues.md#resource-considerations)

### 以专用 Content-Type 返回 Markdown

v13.35.0 为响应工厂新增了 `markdown()`。它以 `text/markdown` 返回 Markdown 正文，也可以指定状态码和附加头。

```php theme={null}
return response()->markdown("# Report\n\nMonthly summary", 200, [
    'Cache-Control' => 'no-store',
]);
```

可以与 `wantsMarkdown()` 等选择响应格式的处理组合使用。它不是把 Markdown 转换为 HTML 返回的功能，而是把 Markdown 本身作为响应提供的 API。

一手资料：[Return Markdown Responses](https://laravel.com/framework/docs/changelog#october-2026-return-markdown-responses)、[Laravel 13 官方 responses.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/responses.md#markdown-responses)。相关页面：[响应](https://kawax.biz/zh-CN/responses.md)

### 在 Vitess 中以 OLAP 模式执行分析查询

v13.36.0 为 MySQL 连接新增了 `isVitess()` 和 `olap()`。可以判断是否在使用 Vitess 或 PlanetScale，并以 OLAP 工作负载执行分析用途的查询。

```php theme={null}
use Illuminate\Support\Facades\DB;

$totals = DB::connection('mysql')->olap(
    fn ($connection) => $connection->table('orders')
        ->selectRaw('customer_id, sum(total) as total')
        ->groupBy('customer_id')
        ->get()
);
```

它会为读取和写入两个连接设置工作负载，并在回调结束时恢复为 OLTP。发生异常时也会恢复，在非 Vitess 的普通 MySQL 连接上，则不改变工作负载直接执行回调。

一手资料：[Use OLAP Workloads with Vitess Connections](https://laravel.com/framework/docs/changelog#october-2026-use-olap-workloads-with-vitess-connections)、[Laravel 13 官方 database.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#running-analytical-queries-on-vitess)

### 通过 Builder 找到现有验证规则

v13.36.0 为许多以前以字符串指定的规则新增了 `Rule` 的 Builder 方法。`requiredWith()`、`acceptedIf()`、`regex()`、`timezone()` 等更容易通过 IDE 补全找到，并且可以在保持现有验证行为的同时选择写法。

```php theme={null}
use Illuminate\Validation\Rule;

$rules = [
    'nickname' => [Rule::requiredWith('email'), Rule::regex('/^[a-z]+$/i')],
    'terms' => [Rule::acceptedIf('account_type', 'business')],
    'timezone' => [Rule::timezone()],
];
```

方法名采用 camel case。也可以与字符串规则混用，因此无需一次性改写现有规则。

一手资料：[Discover More Validation Rules Through Builders](https://laravel.com/framework/docs/changelog#october-2026-discover-more-validation-rules-through-builders)、[Laravel 13 官方 validation.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/validation.md#rule-builders)。相关页面：[校验](https://kawax.biz/zh-CN/validation.md)

## Laravel Cloud

官方月度博客介绍了以下 3 个项目。

| 功能 | 更新内容 |
| - | - |
| Resend 集成 | 将 Resend 账户连接到组织后，会导入发信域名，并显示所需的 DNS 记录和验证状态。将邮件资源连接到环境后，Cloud 会签发 API 密钥，并设置 `RESEND_API_KEY`、`MAIL_MAILER`、`MAIL_FROM_ADDRESS` 和 `MAIL_FROM_NAME`。 |
| Cloud scheduler | Cloud 支持的各语言应用无需安装 cron 或常驻调度器进程，即可执行定时命令。可以使用预设或自定义 cron 表达式，并在 Logs 中查看执行结果的输出、退出码和耗时。 |
| 域名健康检查 | 每小时确认已连接域名的 DNS 是否指向 Cloud，以及 SSL 证书的续期状态。问题会显示在环境画布上，并通过邮件和 Slack 通知。 |

一手资料：[Laravel October Product Updates — Laravel Cloud](https://laravel.com/blog/laravel-october-product-updates#laravel-cloud)、[Laravel Cloud changelog](https://laravel.com/cloud/docs/changelog)。相关页面：[Laravel Cloud 介绍](https://kawax.biz/zh-CN/blog/laravel-cloud.md)

## Laravel Forge

* **PHP 安全更新通知**：按服务器显示受 10 月 PHP 安全发布影响的版本，并提示修复版本的提供情况。可以通过 **Recheck versions** 重新确认实际安装的版本。重新确认显示和更新 PHP 是不同的操作。
* **预配失败的处理**：将无法完成的服务器显示为失败状态，并提供通知、后续操作指引和删除操作。PHP 和 Nginx 的安装也会在确定失败前重试。

月度博客还提到了发布回顾 10 月 PHP 和 Node.js 安全应对的 Post-mortem。具体应对内容和更新判断，请参阅官方说明。

一手资料：[Laravel October Product Updates — Laravel Forge](https://laravel.com/blog/laravel-october-product-updates#laravel-forge)、[Laravel Forge changelog](https://laravel.com/forge/docs/changelog)

## 相关文章

> [card] [2026 年 9 月更新](https://kawax.biz/zh-CN/blog/changelog/202609.md)
>
> 回顾运行时构建 AI 提供者、搜索扩展、Mercure 以及 Cloud 的隔离预览环境。

> [card] [数据库指南](https://kawax.biz/zh-CN/database.md)
>
> 确认读写分离和数据库连接的基础知识。


## Related topics

- [2026 年 9 月 Laravel 更新](https://kawax.biz/zh-CN/blog/changelog/202609.md)
- [2026 年 3 月 Laravel 更新](https://kawax.biz/zh-CN/blog/changelog/202603.md)
- [2026 年 7 月 Laravel 更新](https://kawax.biz/zh-CN/blog/changelog/202607.md)
- [2026 年 8 月 Laravel 更新](https://kawax.biz/zh-CN/blog/changelog/202608.md)
- [2026 年 4 月 Laravel 更新](https://kawax.biz/zh-CN/blog/changelog/202604.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.