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

# Mises à jour Laravel — juin 2026

> Mise à jour de l'écosystème Laravel en juin 2026 : Bus::bulk(), prise en charge du pooler de transactions Postgres, client/serveur MCP, commande artisan dev, métadonnées de routes, etc.

En juin 2026, Laravel Cloud prend en charge les applications Symfony et Forge ajoute un cache Valkey managé ainsi que du stockage objet. Côté framework, on retrouve un lot conséquent de mises à jour : dispatch de jobs en masse, pooler Postgres, client/serveur MCP, etc.

Source : [Laravel June Product Updates](https://laravel.com/blog/laravel-june-product-updates)

***

## Laravel Framework

### Bus::bulk() — dispatch de jobs en masse

Il est maintenant possible d'enregistrer un grand nombre de jobs avec un seul INSERT en base. L'INSERT en masse est effectué par connexion/queue, ce qui évite le coût d'un INSERT par job.

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

Bus::bulk([
    new ProcessOrder($order1),
    new ProcessOrder($order2),
    new ProcessOrder($order3),
    // Efficace même pour des milliers d'éléments
]);
```

### Prise en charge du pooler de transactions Postgres

Les poolers de connexions Postgres en mode transaction — PgBouncer, AWS RDS Proxy, Neon, etc. — sont désormais pris en charge au niveau du framework.

```php theme={null}
// config/database.php
'pgsql' => [
    'driver' => 'pgsql',
    'pooled' => true,  // Déclarer que la connexion passe par un pooler
    // ...
],
```

<Info>
  Pour les opérations de schéma ou les instructions DDL qui nécessitent une connexion directe, ajoutez `::direct` au nom de la connexion pour contourner le pooler.
  `DB::connection('pgsql::direct')->statement('CREATE INDEX ...')`
</Info>

Le framework gère automatiquement les emulated prepares, les binding booléens et tous les traitements nécessaires au pooler.

### Prise en charge des outils client et serveur MCP

Les agents IA Laravel peuvent désormais utiliser les outils de serveurs MCP distants (via HTTP) et de classes de serveurs MCP locales. La conversion de schéma, l'encapsulation et l'appel sont entièrement automatisés.

```php theme={null}
class MyAgent extends Agent
{
    public function tools(): array
    {
        return [
            // Utiliser les outils d'un serveur MCP distant
            McpClient::tools('https://mcp.example.com'),
            // Utiliser les outils d'un serveur MCP local
            McpServer::tools(MyMcpServer::class),
        ];
    }
}
```

### Commande artisan dev

`artisan dev` permet de démarrer tous les processus de développement avec une seule commande. Serveur, worker de queue, tailing des logs et Vite tournent simultanément, chacun avec une sortie en couleur distincte.

```bash theme={null}
php artisan dev
```

```php theme={null}
// Enregistrer des commandes supplémentaires depuis un service provider
use Illuminate\Foundation\Console\DevCommands;

DevCommands::artisan('reverb:start', 'reverb')->orange();
DevCommands::register('stripe listen --forward-to ' . config('app.url'))->green();
```

<Tip>
  Détecte automatiquement le gestionnaire de paquets Node.js (npm, yarn, pnpm, bun). C'est la convention officielle Artisan qui remplace l'ancien script `composer dev`.
</Tip>

### Prise en charge des métadonnées de routes

La méthode `->metadata()` permet d'associer des métadonnées arbitraires à une route. Elle est totalement compatible avec le cache de routes, et les métadonnées définies sur un groupe sont fusionnées avec les routes enfants.

```php theme={null}
Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
        Route::get('/users', [UserController::class, 'index'])
            ->metadata(['head' => ['title' => 'Users']]);
    });

// Accès depuis un contrôleur ou un middleware
$request->route()->getMetadata('head.title');          // 'Users'
$request->route()->getMetadata('head.author', 'Taylor'); // 'Taylor'
```

### Gestionnaire d'exceptions sans réessai

Il est désormais possible d'empêcher les nouvelles tentatives pour les exceptions qu'il est inutile de relancer (entrée invalide, panne externe persistante, etc.).

```php theme={null}
// Définition directement sur la classe d'exception
class InvalidInputException extends RuntimeException
{
    public function retry(): bool
    {
        return false;
    }
}

// Configurable également dans bootstrap/app.php
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontRetry(InvalidInputException::class);
})
```

### Flag --without-migration-data pour schema:dump

`schema:dump` peut désormais produire un dump de structure pur, en omettant les lignes de la table de migrations.

```bash theme={null}
php artisan schema:dump --without-migration-data
```

### Correction du fuseau horaire de between()/unlessBetween()

`between()` et `unlessBetween()` fonctionnent désormais avec le bon fuseau horaire quel que soit l'ordre par rapport à `timezone()`.

```php theme={null}
// Les deux se comportent désormais de la même manière
// (auparavant, écrire between avant provoquait l'utilisation d'UTC)
$schedule->command('foo')->timezone('Europe/Rome')->between('10:00', '12:00');
$schedule->command('foo')->between('10:00', '12:00')->timezone('Europe/Rome');
```

### Autres modifications du framework

* **Support des traits pour `Bus::bulk()`** : possibilité de définir des attributs de queue dans un trait
* **Index vectoriels MariaDB** : prise en charge des index vectoriels sur MariaDB
* **Helper `attachFromStorage()`** : ajouter une pièce jointe depuis le stockage à un `MailMessage` de notification
* **`Cache::rememberWithState()`** : cache avec support d'un état
* **Driver de mode maintenance pour tests parallèles** : le driver `array` permet à chaque processus d'avoir son propre état de maintenance
* **`whenFilledEnum()`** : traitement conditionnel d'un champ à l'aide d'une Enum
* **Support anyOf pour JSON Schema** : possibilité d'utiliser `anyOf` de JSON Schema dans la validation

***

## Inertia

* **`Client\Request::uri()`** : récupération de l'URI d'une requête client
* **Attribut `target` des ancres** : le composant `<Link>` prend en charge `target="_blank"` et similaires
* **Option `async` des formulaires** : le composant Form prend en charge l'envoi asynchrone
* **Info de page dans `titleCallback`** : les données de page sont passées au callback de titre

***

## Laravel Cloud et Laravel Forge

| Produit           | Principales mises à jour                                                                                                                                                                                 |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Laravel Cloud** | Prise en charge complète des applications Symfony (Symfony 7.4 LTS et 8.x, PHP 8.2 à 8.5), déploiement et paiements depuis Stripe Projects, notifications Slack/e-mail configurables par membre d'équipe |
| **Laravel Forge** | Cache Valkey managé (création et gestion depuis le tableau de bord), stockage objet managé, refonte des e-mails de notification                                                                          |


## Related topics

- [Mises à jour Laravel — mars 2026](/fr/blog/changelog/202603.md)
- [Mises à jour Laravel — mai 2026](/fr/blog/changelog/202605.md)
- [Mises à jour Laravel — avril 2026](/fr/blog/changelog/202604.md)
- [Guide de mise à niveau de Laravel 12 vers 13](/fr/blog/upgrade-12-to-13.md)
- [Les nouveautés de Laravel 13](/fr/blog/laravel-13-new-features.md)
