Laravel Framework 13.33.0 est la version 13.x examinée dans l'article publié le 23 septembre 2026. Cette revue apporte des détails d'implémentation qui complètent le précédent compte rendu.
use Illuminate\Database\Eloquent\Attributes\Refreshes;
#[Refreshes('name')]
class User extends Model
{
}Joost de Bruijn a ajouté la méthode tags() au store de cache memoized. Cache::memo() peut désormais associer la mise en cache en mémoire d'une requête aux caches avec tags. Deux lectures identiques contactent le backend une seule fois, puis utilisent la valeur mémorisée. Une écriture met à jour le cache tagué et invalide sa copie en mémoire. Le vidage d'un tag supprime aussi les entrées mémorisées correspondantes. Laravel 12.9 avait introduit le cache memoized sans tags. Les appels tagués nécessitaient auparavant un second accès via Cache::store('array'). La modification figure dans la PR #61593.
Caleb White a ajouté l'attribut #[Refreshes] et la propriété $refreshes correspondante pour les modèles Eloquent. Ils rechargent certaines colonnes après la création ou la mise à jour d'un modèle. La fonctionnalité vise les colonnes virtualAs, storedAs et les autres valeurs générées par la base de données. Ces valeurs peuvent sinon manquer ou rester obsolètes dans le modèle en mémoire. Laravel exécute une requête sur la connexion d'écriture et ne sélectionne que les colonnes indiquées. Les noms peuvent être fournis sous forme de tableau ou d'arguments variadiques. Dans l'exemple, #[Refreshes('name')] sur User rend la valeur "Taylor Otwell" disponible après la création avec first_name et last_name. L'implémentation se trouve dans la PR #61523.
Zein Ahmad a ajouté un mode nullable() optionnel à AsCollection et AsArrayObject. Les casts classiques continuent d'enregistrer null sous la forme de la chaîne JSON "null". Les variantes nullable écrivent un NULL SQL, ce qui permet à whereNull() de trouver la ligne. Les appels disponibles sont AsCollection::nullable() et AsArrayObject::nullable(). La PR #61596 porte cette évolution.
Sander Muller a ajouté les modificateurs inplace() et lock() aux opérations sur les index et les clés étrangères. Une migration MySQL peut demander ALGORITHM=INPLACE et LOCK=NONE. Dans les cas pris en charge, la table évite ainsi une reconstruction bloquante. Les modificateurs s'appliquent à index(), unique(), primary(), fullText(), spatialIndex() et foreign(). Ils complètent le modificateur instant() déjà disponible pour les définitions de colonnes. Le changement est détaillé dans la PR #61602.
Md Sukkur Ali a corrigé la résolution des attributs dans les FormRequest héritées. PHP ne transmet pas automatiquement les attributs des classes parentes. Les attributs #[StopOnFirstFailure] et #[FailOnUnknownFields] placés sur une classe ApiRequest commune étaient donc ignorés par les classes enfants. StorePostRequest les reçoit désormais lorsqu'elle étend ApiRequest. Le correctif est référencé par la PR #61586.
Jack Bayliss a ajouté Worker::$killOnTimeout. Par défaut, un job qui dépasse son délai termine le processus worker. Le superviseur en lance ensuite un nouveau. Avec false, le worker lève TimeoutExceededException. Le job peut effectuer son nettoyage et le worker reste actif. Un try/catch trop large autour de handle() peut absorber cette exception. Kieran Brown a aussi ajouté Worker::killUsing(), un hook exécuté avant SIGKILL qui permet de transmettre un code de sortie personnalisé au superviseur. Ces changements figurent dans les PRs #61591 et #61622.
Jenthe Noordsij sépare les deux usages de $this->artisan() avec mockArtisan() et realArtisan(). Le premier renvoie un PendingCommand destiné aux attentes. Le second exécute réellement la commande et renvoie son code de sortie sous forme d'entier. Les tests n'ont plus besoin de modifier $mockConsoleOutput. Les helpers sont suivis dans la PR #61588.
Le changelog complet de 13.33.0 énumère de nombreuses corrections et améliorations supplémentaires: suppression de restart_syscalls dans pcntl_signal pour Worker, ajustement du stockage des hachages de mots de passe pour les sessions authentifiées, correction des clés d'enum dans many() et get() des caches tagués, correction de Eloquent Collection duplicates() avec une clé ou un callback, amélioration des nouvelles tentatives des jobs Cloud, support de brick/math 0.20 et 1.0, health-start-period dans les workflows, order() pour DevCommands, EncodedParameter pour RouteUrlGenerator, meilleurs types pour Collection::put(), URL relatives pour le hub Mercure, options serveur pour PostgreSQL, couverture CI pour MariaDB 11 et 12.3, protocoles valkey:// et valkeys://, correction des dumps de schéma SQLite avec shadow tables, harmonisation de l'orthographe des docblocks, flag Composer --with-all-dependencies, reconstruction du client phpredis après perte de connexion lors d'une pipeline ou transaction, --pretend avec install:broadcasting, batch actualisé pour les événements BatchFinished et BatchCanceled, tableau JSON vide avec route:list --json, vue par défaut pour make:notification --markdown, améliorations de la suite de tests, correction de LazyCollection::take() avec limite négative élevée, omission des batches impossibles à relancer dans queue:retry-batch, regroupement et corrections d'ordre des tests, respect de FILESYSTEM_DISK dans la configuration Cloud, support des réplicas de lecture de base de données, pooling PostgreSQL natif optionnel, gestion des en-têtes non textuels de NotPwndVerifier, correction des erreurs de curseur Redis 7.4 avec Predis scan(), restauration des logs de requête après échec de callback pretend, sole dans les proxies higher-order, createQuietly() et createManyQuietly() sur BelongsToMany, ainsi que des améliorations du binding d'expressions dans whereValueBetween().




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.