> ## 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 — octobre 2026

> Les mises à jour de Laravel 13 et des produits officiels en octobre 2026. Routes QUERY, protection contre les lectures obsolètes des réplicas, tâches planifiées sur un seul serveur, assertions de fakes par propriétés, intégration Resend dans Cloud et alertes de mise à jour PHP dans Forge.

Octobre 2026 a apporté des fonctionnalités pour contrôler la forme des requêtes, la destination des lectures en base de données et l'exécution des tâches planifiées sur plusieurs serveurs. Laravel Cloud a simplifié l'envoi d'e-mails et la configuration des commandes planifiées, et Forge permet de suivre plus facilement les mises à jour de sécurité de PHP et les échecs de provisionnement.

Cette page est un compte rendu mensuel fondé sur l'article officiel « Laravel October Product Updates » publié le 4 novembre et sur les entrées d'octobre du changelog officiel du Framework. Les sources primaires ont été vérifiées le 7 novembre 2026, et la partie Framework ne couvre que Laravel 13. Les versions de novembre ne sont pas incluses.

Sources :

* [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

### Versions publiées en octobre

En plus des principales nouveautés du changelog officiel, les dates et les versions ont été vérifiées dans les notes de version.

| Version | Publication | Principaux changements |
| - | - | - |
| [v13.35.0](https://github.com/laravel/framework/releases/tag/v13.35.0) | 6 octobre | Assertions de propriétés pour les fakes, mémoire du worker en pourcentage, réponses Markdown, `alwaysOnOneServer()`, routes QUERY. |
| [v13.36.0](https://github.com/laravel/framework/releases/tag/v13.36.0) | 13 octobre | Exécution OLAP avec Vitess, builders pour les règles de validation existantes. |
| [v13.37.0](https://github.com/laravel/framework/releases/tag/v13.37.0) | 16 octobre | Option strict pour `Rule::numeric()`, correction de la concurrence lorsque `onOneServer()` et `withoutOverlapping()` sont combinés. |
| [v13.38.0](https://github.com/laravel/framework/releases/tag/v13.38.0) | 20 octobre | `PreventStaleDatabaseReads`, `Connection::usingWritePdo()`. |
| [v13.39.0](https://github.com/laravel/framework/releases/tag/v13.39.0) | 27 octobre | `RefreshDatabase` annule tous les niveaux de transaction après chaque test, correction de `assertSeeText('0')` qui réussissait à tort. |

Les sections suivantes détaillent les neuf éléments du changelog officiel. Pour les corrections mineures et les changements de dépendances, consultez chaque note de version.

### Définir des recherches avec un corps de requête grâce aux routes QUERY

La v13.35.0 a ajouté `Route::query()`, qui prend en charge la méthode HTTP `QUERY`. Vous pouvez définir des routes qui reçoivent les critères de recherche dans le corps de la requête plutôt que dans la query string de GET.

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

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

`Route::any()` correspond aussi aux requêtes QUERY, et la liste des routes reconnaît cette méthode. Le `SearchProductsController` ci-dessus représente un contrôleur invocable de votre application qui implémente la recherche.

> [!WARNING]
>
> Les routes QUERY du groupe de middlewares `web` sont soumises à la vérification CSRF. Ne considérez pas que vous pouvez sauter la vérification comme pour GET parce qu'il s'agit d'une recherche. Envoyez le jeton CSRF.

Sources principales : [Register QUERY Routes](https://laravel.com/framework/docs/changelog#october-2026-register-query-routes), [routing.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/routing.md#available-router-methods). Pages associées : [Routage](https://kawax.biz/fr/routing.md), [Protection CSRF](https://kawax.biz/fr/csrf.md)

### Éviter les lectures obsolètes dans les requêtes suivant une écriture

Avec une base de données à lecture et écriture séparées, une lecture juste après une mise à jour peut partir vers un réplica de lecture pas encore synchronisé. L'option existante `sticky` ne couvre que la même requête. Le middleware `PreventStaleDatabaseReads` de la v13.38.0 protège aussi, pendant une certaine durée, les requêtes suivantes de la même session.

Dans `bootstrap/app.php`, importez `Illuminate\Foundation\Http\Middleware\PreventStaleDatabaseReads` et ajoutez-le dans le callback de `withMiddleware()` avec `$middleware->web(append: [PreventStaleDatabaseReads::class]);`. Il n'est pas activé automatiquement.

Le middleware enregistre dans la session l'heure des écritures sur la connexion de base de données par défaut. Par défaut, il dirige les lectures de cette connexion vers la base d'écriture pendant 2 secondes après une écriture. Vous pouvez changer la durée en enregistrant par exemple `PreventStaleDatabaseReads::for(5)` à la place de la classe.

```mermaid theme={null}
sequenceDiagram
    participant User as Utilisateur
    participant App as Application<br>Laravel
    participant Session as Session
    participant Write as Write DB
    participant Read as Read replica
    User->>App: Requête de mise à jour
    App->>Write: Écrire les données
    App->>Session: Enregistrer l'heure d'écriture
    User->>App: Requête suivante de la même session
    App->>Session: Vérifier le temps écoulé depuis l'écriture
    alt Pendant la période de 2 secondes
        App->>Write: Lire les données
    else Après la période
        App->>Read: Utiliser la destination de lecture habituelle
    end
```

Comme il utilise la session, il doit s'exécuter après `StartSession`. Il ne bascule pas les lectures des autres sessions ni des autres connexions, et ne détecte pas la fin de la synchronisation du réplica.

Sources principales : [Avoid Stale Reads After Database Writes](https://laravel.com/framework/docs/changelog#october-2026-avoid-stale-reads-after-database-writes), [database.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#preventing-stale-database-reads). Pages associées : [Base de données](https://kawax.biz/fr/database.md), [Session](https://kawax.biz/fr/session.md)

### Lire depuis la base d'écriture pour certains traitements seulement

`Connection::usingWritePdo()`, ajouté également dans la v13.38.0, bascule la destination de lecture de la connexion vers la base d'écriture uniquement pendant l'exécution du callback. Il est utile lorsque vous voulez que l'application indique explicitement quelles lectures sont critiques, plutôt que de protéger toute une session.

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

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

Il s'applique aussi aux requêtes Eloquent et aux requêtes de relations qui utilisent la même connexion. Il renvoie le résultat du callback et restaure le réglage de lecture précédent même en cas d'exception, si bien que la bascule ne persiste pas dans le code suivant.

Sources principales : [Temporarily Read from the Write Database Connection](https://laravel.com/framework/docs/changelog#october-2026-temporarily-read-from-the-write-database-connection), [database.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#using-the-write-connection-for-reads)

### Configurer globalement l'exécution des tâches sur un seul serveur

Pour réduire les oublis de `onOneServer()` lorsque le planificateur tourne sur plusieurs serveurs, la v13.35.0 a ajouté `Schedule::alwaysOnOneServer()`. Appelez-le dans `boot()` de `AppServiceProvider` pour l'appliquer d'un coup à toutes les tâches planifiées concernées.

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

Schedule::alwaysOnOneServer();
```

Cette valeur par défaut ne prend effet qu'une fois appelée. Les closures planifiées sans nom sont exclues et continuent de s'exécuter sur chaque serveur.

> [!NOTE]
>
> `onOneServer()` nécessite un cache central partagé par tous les serveurs. Les drivers indiqués par la documentation officielle sont `database`, `memcached`, `dynamodb` et `redis`. Ajouter le réglage ne fournit pas à lui seul une infrastructure de verrouillage entre serveurs.

Sources principales : [Run Scheduled Tasks on One Server by Default](https://laravel.com/framework/docs/changelog#october-2026-run-scheduled-tasks-on-one-server-by-default), [scheduling.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/scheduling.md#running-tasks-on-one-server). Page associée : [Planification des tâches](https://kawax.biz/fr/scheduling.md)

### Vérifier les dispatchs des fakes en indiquant des propriétés

Depuis la v13.35.0, les fakes Queue, Bus, Event et Notification acceptent un tableau de propriétés attendues. Vous n'avez plus besoin d'écrire un callback à chaque fois pour une simple comparaison d'attributs.

Par exemple, avec un job `ShipOrder` doté d'une propriété publique `order` et un `$order` préparé dans le test, vous pouvez vérifier ainsi :

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

Queue::fake();

ShipOrder::dispatch($order);

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

Toutes les propriétés indiquées doivent correspondre. Les valeurs sont comparées strictement, mais les modèles Eloquent sont comparés avec `is()`, si bien qu'une autre instance représentant le même modèle correspond aussi. Les fakes vérifient le dispatch, pas le résultat de l'exécution du job lui-même.

Sources principales : [Assert Fake Dispatches by Their Properties](https://laravel.com/framework/docs/changelog#october-2026-assert-fake-dispatches-by-their-properties), [queues.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/queues.md#testing). Pages associées : [Files d'attente](https://kawax.biz/fr/queues.md), [Mocking](https://kawax.biz/fr/mocking.md)

### Indiquer la limite mémoire du worker en pourcentage

Depuis la v13.35.0, l'option `--memory` de `queue:work` accepte un pourcentage du `memory_limit` de PHP. Vous pouvez ajuster le seuil d'arrêt du worker au réglage PHP sans recalculer une valeur fixe en Mo pour chaque environnement.

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

Ce n'est pas un pourcentage de la mémoire totale de l'hôte ou du conteneur. Si le `memory_limit` de PHP est illimité (`-1`), utilisez une valeur en Mo plutôt qu'un pourcentage. Le redémarrage d'un worker arrêté au seuil est confié à un superviseur de processus comme Supervisor.

Sources principales : [Set Queue Worker Memory Limits as Percentages](https://laravel.com/framework/docs/changelog#october-2026-set-queue-worker-memory-limits-as-percentages), [queues.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/queues.md#resource-considerations)

### Renvoyer du Markdown avec un Content-Type dédié

La v13.35.0 a ajouté `markdown()` à la factory de réponses. Elle renvoie un contenu Markdown en `text/markdown`, et vous pouvez aussi indiquer un code de statut et des en-têtes supplémentaires.

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

Vous pouvez la combiner avec une logique qui choisit le format de réponse, comme `wantsMarkdown()`. Elle ne convertit pas le Markdown en HTML. C'est une API pour servir le Markdown lui-même comme réponse.

Sources principales : [Return Markdown Responses](https://laravel.com/framework/docs/changelog#october-2026-return-markdown-responses), [responses.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/responses.md#markdown-responses). Page associée : [Réponses](https://kawax.biz/fr/responses.md)

### Exécuter des requêtes analytiques en mode OLAP avec Vitess

La v13.36.0 a ajouté `isVitess()` et `olap()` aux connexions MySQL. Vous pouvez détecter l'utilisation de Vitess ou de PlanetScale et exécuter des requêtes analytiques avec la charge de travail 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()
);
```

La charge de travail est définie sur les connexions de lecture et d'écriture, puis remise en OLTP à la fin du callback. Elle est aussi restaurée en cas d'exception, et sur une connexion MySQL ordinaire sans Vitess, le callback s'exécute sans changer la charge de travail.

Sources principales : [Use OLAP Workloads with Vitess Connections](https://laravel.com/framework/docs/changelog#october-2026-use-olap-workloads-with-vitess-connections), [database.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#running-analytical-queries-on-vitess)

### Trouver les règles de validation existantes grâce aux builders

La v13.36.0 a ajouté des méthodes builder de `Rule` pour de nombreuses règles qui s'écrivaient jusque-là sous forme de chaîne. Des méthodes comme `requiredWith()`, `acceptedIf()`, `regex()` et `timezone()` se trouvent plus facilement grâce à l'autocomplétion de l'IDE, et vous pouvez choisir le style d'écriture sans changer le comportement de validation existant.

```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()],
];
```

Les noms de méthodes sont en camel case. Vous pouvez les mélanger avec des règles en chaîne, il n'est donc pas nécessaire de réécrire toutes les règles existantes d'un coup.

Sources principales : [Discover More Validation Rules Through Builders](https://laravel.com/framework/docs/changelog#october-2026-discover-more-validation-rules-through-builders), [validation.md officiel de Laravel 13](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/validation.md#rule-builders). Page associée : [Validation](https://kawax.biz/fr/validation.md)

## Laravel Cloud

Le blog mensuel officiel présente les trois éléments suivants.

| Fonctionnalité | Nouveauté |
| - | - |
| Intégration Resend | Lorsque vous connectez un compte Resend à votre organisation, Cloud importe les domaines d'envoi et affiche les enregistrements DNS nécessaires et l'état de vérification. Lorsque vous connectez la ressource e-mail à un environnement, Cloud émet une clé d'API et définit `RESEND_API_KEY`, `MAIL_MAILER`, `MAIL_FROM_ADDRESS` et `MAIL_FROM_NAME`. |
| Cloud scheduler | Les applications de tous les langages pris en charge par Cloud peuvent exécuter des commandes planifiées sans installer cron ni maintenir un processus de planification. Vous utilisez des préréglages ou vos propres expressions cron et consultez dans Logs la sortie, le code de sortie et la durée de chaque exécution. |
| Vérification de l'état des domaines | Cloud vérifie toutes les heures que le DNS des domaines connectés pointe vers Cloud et l'état de renouvellement des certificats SSL. Les problèmes s'affichent sur le canevas de l'environnement et sont aussi notifiés par e-mail et Slack. |

Sources principales : [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). Page associée : [Présentation de Laravel Cloud](https://kawax.biz/fr/blog/laravel-cloud.md)

## Laravel Forge

* **Alertes de mises à jour de sécurité PHP** : Forge affiche, pour chaque serveur, les versions touchées par les versions de sécurité PHP d'octobre et la disponibilité des versions corrigées. **Recheck versions** revérifie la version réellement installée. Revérifier l'affichage et mettre à jour PHP sont deux opérations distinctes.
* **Gestion des échecs de provisionnement** : les serveurs qui ne peuvent pas être finalisés s'affichent en état d'échec, avec une notification, des indications sur l'étape suivante et une action de suppression. L'installation de PHP et de Nginx est aussi relancée avant de confirmer l'échec.

Le blog mensuel mentionne aussi la publication d'un post-mortem sur la réponse de sécurité PHP et Node.js d'octobre. Pour les mesures prises et les décisions de mise à jour, consultez les annonces officielles.

Sources principales : [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)

## Articles associés

> [card] [Mises à jour de septembre 2026](https://kawax.biz/fr/blog/changelog/202609.md)
>
> Retour sur la construction de fournisseurs d'IA à l'exécution, les extensions de recherche, Mercure et les environnements de prévisualisation isolés dans Cloud.

> [card] [Guide de la base de données](https://kawax.biz/fr/database.md)
>
> Revoyez la séparation lecture/écriture et les bases des connexions de base de données.


## Related topics

- [Mises à jour Laravel — septembre 2026](https://kawax.biz/fr/blog/changelog/202609.md)
- [Mises à jour Laravel — mars 2026](https://kawax.biz/fr/blog/changelog/202603.md)
- [Mises à jour Laravel — juillet 2026](https://kawax.biz/fr/blog/changelog/202607.md)
- [Mises à jour Laravel — août 2026](https://kawax.biz/fr/blog/changelog/202608.md)
- [Mises à jour Laravel — avril 2026](https://kawax.biz/fr/blog/changelog/202604.md)


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