跳转到主要内容
2026 年 6 月,Laravel Cloud 开始支持 Symfony 应用,Forge 新增了托管 Valkey 缓存和对象存储。框架层面也带来了批量作业派发、Postgres 连接池支持、MCP 客户端/服务器等丰富的更新。 参考出处:Laravel June Product Updates

Laravel Framework

Bus::bulk() — 批量作业派发

大量作业现在可以通过一次数据库 INSERT 完成登记。按每个队列/连接分别执行批量 INSERT,省去了逐条 INSERT 的开销。
use Illuminate\Support\Facades\Bus;

Bus::bulk([
    new ProcessOrder($order1),
    new ProcessOrder($order2),
    new ProcessOrder($order3),
    // 数千条也很高效
]);

Postgres 事务池支持

框架层面支持了 PgBouncer、AWS RDS Proxy、Neon 等事务模式的 Postgres 连接池。
// config/database.php
'pgsql' => [
    'driver' => 'pgsql',
    'pooled' => true,  // 声明经过连接池的连接
    // ...
],
对于需要直连的场景(如模式操作或 DDL 语句),可以在连接名后加 ::direct 来绕过连接池。 DB::connection('pgsql::direct')->statement('CREATE INDEX ...')
框架会自动处理 emulated prepares、boolean binding 以及连接池所需的其他所有处理。

MCP 客户端 / 服务器工具支持

Laravel AI 智能体现在可以使用远程 MCP 服务器(通过 HTTP)以及本地 MCP 服务器类的工具。Schema 转换、封装、调用都会自动处理。
class MyAgent extends Agent
{
    public function tools(): array
    {
        return [
            // 使用远程 MCP 服务器的工具
            McpClient::tools('https://mcp.example.com'),
            // 使用本地 MCP 服务器的工具
            McpServer::tools(MyMcpServer::class),
        ];
    }
}

artisan dev 命令

新增 artisan dev,一条命令启动所有开发进程。服务器、队列 Worker、日志 tail、Vite 会以带颜色的输出并行运行。
php artisan dev
// 在服务提供者中注册额外命令
use Illuminate\Foundation\Console\DevCommands;

DevCommands::artisan('reverb:start', 'reverb')->orange();
DevCommands::register('stripe listen --forward-to ' . config('app.url'))->green();
会自动检测 Node.js 包管理器(npm、yarn、pnpm、bun)。这是 Artisan 官方约定,用于替代以往的 composer dev 脚本。

路由元数据支持

新增 ->metadata() 方法,可以为路由附加任意元数据。它与路由缓存完全兼容,组上设置的元数据会合并到子路由上。
Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
        Route::get('/users', [UserController::class, 'index'])
            ->metadata(['head' => ['title' => 'Users']]);
    });

// 从控制器或中间件访问
$request->route()->getMetadata('head.title');          // 'Users'
$request->route()->getMetadata('head.author', 'Taylor'); // 'Taylor'

不重试的异常处理

对于重试也没有意义的异常(错误输入、永久性外部故障等),现在可以阻止重试。
// 直接在异常类中定义
class InvalidInputException extends RuntimeException
{
    public function retry(): bool
    {
        return false;
    }
}

// 也可以在 bootstrap/app.php 中配置
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontRetry(InvalidInputException::class);
})

schema:dump 的 —without-migration-data 标志

schema:dump 现在可以生成不含迁移表数据行的纯结构快照。
php artisan schema:dump --without-migration-data

between()/unlessBetween() 的时区修复

无论 timezone() 是在 between()unlessBetween() 之前还是之后调用,调度都能以正确的时区运行。
// 两种写法行为一致(以前先写 between 会导致按 UTC 处理的问题)
$schedule->command('foo')->timezone('Europe/Rome')->between('10:00', '12:00');
$schedule->command('foo')->between('10:00', '12:00')->timezone('Europe/Rome');

其他框架变更

  • Bus::bulk() 支持 Trait:可以在 Trait 中定义队列属性
  • MariaDB 向量索引:MariaDB 支持向量索引
  • attachFromStorage() helper:通知的 MailMessage 可以从存储中附加文件
  • Cache::rememberWithState():支持带状态的缓存
  • 并行测试用的维护模式驱动:array 驱动让每个进程持有独立的维护状态
  • whenFilledEnum():支持基于 Enum 的字段条件处理
  • JSON Schema 的 anyOf 支持:验证时可使用 JSON Schema 的 anyOf

Inertia

  • Client\Request::uri():获取客户端请求的 URI
  • 锚点的 target 属性支持:<Link> 组件支持 target="_blank"
  • 表单的 async 选项:表单组件支持异步提交
  • titleCallback 得到页面信息:标题回调会拿到页面数据

Laravel Cloud / Laravel Forge

产品主要更新
Laravel Cloud完整支持 Symfony 应用(Symfony 7.4 LTS / 8.x,PHP 8.2~8.5),支持从 Stripe Projects 部署与付款,可按团队成员配置 Slack / 邮件通知
Laravel Forge托管 Valkey 缓存(可从面板创建与管理)、托管对象存储、通知邮件重设计
最后修改于 2026年7月13日