Zum Hauptinhalt springen
Im Juni 2026 unterstützt Laravel Cloud Symfony-Anwendungen; in Forge kamen ein Managed Valkey Cache und Object Storage hinzu. Das Framework erhielt umfangreiche Updates wie Bulk-Job-Dispatch, Postgres-Pooler-Unterstützung sowie MCP-Client/-Server. Quelle: Laravel June Product Updates

Laravel Framework

Bus::bulk() – Bulk-Dispatch für Jobs

Große Mengen an Jobs lassen sich nun in einem einzigen Datenbank-INSERT registrieren. Da pro Queue-Verbindung ein Bulk-INSERT erfolgt, entfallen die Kosten des Einzel-INSERTs.
use Illuminate\Support\Facades\Bus;

Bus::bulk([
    new ProcessOrder($order1),
    new ProcessOrder($order2),
    new ProcessOrder($order3),
    // effizient auch bei Tausenden Einträgen
]);

Unterstützung für Postgres Transaction Pooler

Postgres-Connection-Pooler im Transaction-Modus wie PgBouncer, AWS RDS Proxy und Neon werden nun auf Framework-Ebene unterstützt.
// config/database.php
'pgsql' => [
    'driver' => 'pgsql',
    'pooled' => true,  // eine Verbindung über den Pooler deklarieren
    // ...
],
Wenn Schema-Operationen oder DDL-Statements eine direkte Verbindung erfordern, umgehen Sie den Pooler, indem Sie ::direct an den Verbindungsnamen anhängen. DB::connection('pgsql::direct')->statement('CREATE INDEX ...')
Das Framework übernimmt automatisch Emulated Prepares, Boolean-Bindings und alle sonstigen Vorgänge, die der Pooler erfordert.

Tool-Unterstützung für MCP-Client/-Server

Laravel-KI-Agenten können jetzt Tools von Remote-MCP-Servern (per HTTP) und lokalen MCP-Server-Klassen nutzen. Schema-Umwandlung, Wrapping und Aufruf werden vollautomatisch verarbeitet.
class MyAgent extends Agent
{
    public function tools(): array
    {
        return [
            // Tools eines Remote-MCP-Servers nutzen
            McpClient::tools('https://mcp.example.com'),
            // Tools eines lokalen MCP-Servers nutzen
            McpServer::tools(MyMcpServer::class),
        ];
    }
}

Kommando artisan dev

Mit dem neuen artisan dev lassen sich alle Entwicklungsprozesse in einem einzigen Kommando starten. Server, Queue Worker, Log-Tailing und Vite laufen gleichzeitig mit farblich unterscheidbarer Ausgabe.
php artisan dev
// In einem Service Provider zusätzliche Kommandos registrieren
use Illuminate\Foundation\Console\DevCommands;

DevCommands::artisan('reverb:start', 'reverb')->orange();
DevCommands::register('stripe listen --forward-to ' . config('app.url'))->green();
Node.js-Paketmanager (npm, yarn, pnpm, bun) werden automatisch erkannt. Es ist die offizielle Artisan-Konvention, die das bisherige composer dev-Skript ersetzt.

Unterstützung für Route-Metadaten

Die Methode ->metadata() wurde ergänzt, mit der sich beliebige Metadaten an einer Route hinterlegen lassen. Sie ist vollständig kompatibel zum Route-Cache; an einer Gruppe gesetzte Metadaten werden in die untergeordneten Routen eingefügt.
Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
        Route::get('/users', [UserController::class, 'index'])
            ->metadata(['head' => ['title' => 'Users']]);
    });

// Zugriff aus Controllern oder Middleware
$request->route()->getMetadata('head.title');          // 'Users'
$request->route()->getMetadata('head.author', 'Taylor'); // 'Taylor'

Exception-Handler ohne Retry

Für Exceptions, deren erneuter Versuch sinnlos ist (etwa fehlerhafte Eingaben oder dauerhafte externe Ausfälle), lässt sich das Retry unterdrücken.
// Direkt in der Exception-Klasse definieren
class InvalidInputException extends RuntimeException
{
    public function retry(): bool
    {
        return false;
    }
}

// Konfigurierbar auch in bootstrap/app.php
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontRetry(InvalidInputException::class);
})

Flag —without-migration-data für schema:dump

Bei schema:dump lässt sich ein reiner Strukturdump ohne die Zeilen der Migrationstabelle erzeugen.
php artisan schema:dump --without-migration-data

Zeitzonen-Korrektur für between()/unlessBetween()

Unabhängig davon, ob timezone() vor oder nach between() bzw. unlessBetween() aufgerufen wird, arbeitet der Scheduler nun in der richtigen Zeitzone.
// Beide Varianten verhalten sich gleich (zuvor wurde bei vorangestelltem between UTC verwendet)
$schedule->command('foo')->timezone('Europe/Rome')->between('10:00', '12:00');
$schedule->command('foo')->between('10:00', '12:00')->timezone('Europe/Rome');

Weitere Framework-Änderungen

  • Trait-Unterstützung für Bus::bulk(): Queue-Attribute lassen sich in Traits definieren
  • MariaDB-Vektorindizes: Unterstützung von Vektorindizes in MariaDB
  • Helper attachFromStorage(): Anhänge aus dem Storage direkt an eine MailMessage einer Notification hängen
  • Cache::rememberWithState(): zustandsbehafteter Cache
  • Wartungsmodus-Treiber für parallele Tests: mit dem array-Treiber besitzt jeder Prozess einen eigenen Wartungsstatus
  • whenFilledEnum(): bedingte Verarbeitung von Feldern mit Enums
  • anyOf-Unterstützung für JSON Schema: anyOf aus JSON Schema in der Validierung nutzbar

Inertia

  • Client\Request::uri(): URI eines Client-Requests abrufen
  • target-Attribut für Anchor: target="_blank" u. Ä. an der <Link>-Komponente nutzbar
  • async-Option des Formulars: die Form-Komponente unterstützt asynchronen Versand
  • Seiteninformationen in titleCallback: dem Title-Callback werden die Page-Daten übergeben

Laravel Cloud und Laravel Forge

ProduktWichtige Updates
Laravel CloudVollständige Unterstützung für Symfony-Anwendungen (Symfony 7.4 LTS/8.x, PHP 8.2–8.5), Deployment und Payment über Stripe Projects, Slack/E-Mail-Benachrichtigungen pro Teammitglied konfigurierbar
Laravel ForgeManaged Valkey Cache (Erstellung und Verwaltung über das Dashboard), Managed Object Storage, Redesign der Benachrichtigungs-E-Mails
Zuletzt geändert am 13. Juli 2026