Laravel 12.46 : Nouveaux helpers de filtrage par valeur et méthode containsManyItems
Laravel 12.46, publié le 7 janvier 2026, enrichit la boîte à outils des développeurs avec des méthodes de filtrage par valeur pour les tableaux et une nouvelle vérification pour les collections. Ces ajouts répondent à un besoin récurrent : manipuler des données selon leur contenu plutôt que leurs clés.
Contexte de cette release
Cette version fait partie d’une série de trois releases (12.45.1, 12.45.2 et 12.46.0) publiées le même jour. Elle s’inscrit dans la continuité des améliorations apportées aux helpers Arr et Collection, deux classes fondamentales de Laravel.
La mise à jour inclut également des corrections importantes : le préfixe de table lors du clonage de connexions base de données et les options de verrouillage DDL pour MySQL.
Installation
Pour bénéficier de ces nouveautés, mettez à jour votre dépendance Laravel :
composer update laravel/framework
Aucune modification de code n’est requise : cette release est entièrement rétrocompatible.
Arr::onlyValues() – Garder uniquement certaines valeurs
La méthode Arr::only() filtre par clés. Son nouveau pendant Arr::onlyValues() filtre par valeurs :
use Illuminate\Support\Arr;
$roles = ['admin', 'editor', 'viewer', 'guest'];
// Ne garder que les rôles autorisés
$rolesAutorises = Arr::onlyValues($roles, ['admin', 'editor']);
// Résultat : [0 => 'admin', 1 => 'editor']
Cette méthode préserve les clés originales du tableau, ce qui s’avère utile pour maintenir la correspondance avec d’autres structures de données.
Arr::exceptValues() – Exclure des valeurs spécifiques
À l’inverse, Arr::exceptValues() retire les éléments correspondant aux valeurs spécifiées :
use Illuminate\Support\Arr;
$statuts = ['pending', 'completed', 'failed', 'shipped'];
// Retirer les statuts terminés
$statutsActifs = Arr::exceptValues($statuts, ['failed', 'completed']);
// Résultat : [0 => 'pending', 3 => 'shipped']
Le filtrage de configurations, le nettoyage de données de formulaire ou la création de listes d’exclusion deviennent plus lisibles avec cette syntaxe.
Comparaison stricte des types
Les deux méthodes acceptent un troisième paramètre strict pour une comparaison de types exacte :
use Illuminate\Support\Arr;
$valeursMixtes = [1, '1', 2, '2', 3];
// Mode strict : seules les correspondances exactes de type sont retenues
$entiers = Arr::onlyValues($valeursMixtes, [1, 2, 3], strict: true);
// Résultat : [0 => 1, 2 => 2, 4 => 3]
// Les chaînes '1' et '2' sont exclues
Ce paramètre s’impose lorsque vous manipulez des tableaux contenant des types mixtes (entiers et chaînes numériques par exemple).
Collection::containsManyItems() – Vérifier la présence de plusieurs éléments
La méthode containsOneItem() existe déjà. Laravel 12.46 ajoute containsManyItems() pour vérifier qu’une collection contient plus d’un élément :
collect([])->containsManyItems(); // false
collect([1])->containsManyItems(); // false
collect([1, 2])->containsManyItems(); // true
collect([1, 2, 3])->containsManyItems(); // true
La méthode accepte également un callback pour filtrer avant la vérification :
$utilisateurs = collect([
['nom' => 'Jean', 'role' => 'admin'],
['nom' => 'Marie', 'role' => 'editor'],
['nom' => 'Pierre', 'role' => 'admin'],
]);
// Vérifier s'il existe plusieurs administrateurs
$plusieursAdmins = $utilisateurs->containsManyItems(
fn($user) => $user['role'] === 'admin'
);
// Résultat : true
L’implémentation est optimisée : elle retourne dès qu’elle trouve plus d’un élément correspondant, sans parcourir l’intégralité de la collection.
Cas d’usage : validation de sélection multiple
Voici un exemple concret pour valider qu’un utilisateur a sélectionné au moins deux options :
use Illuminate\Validation\ValidationException;
$optionsSelectionnees = collect($request->input('options'));
if (! $optionsSelectionnees->containsManyItems()) {
throw ValidationException::withMessages([
'options' => 'Veuillez sélectionner au moins deux options.'
]);
}
Gate::has() accepte désormais les UnitEnum
La version 12.45.2 (incluse dans cette série de releases) améliore la méthode Gate::has() pour accepter les UnitEnum, pas seulement les chaînes ou BackedEnum :
enum Abilities {
case VIEW_DASHBOARD;
case EDIT_POST;
case DELETE_USER;
}
Gate::define(Abilities::VIEW_DASHBOARD, fn($user) => $user->isAdmin());
// Vérification type-safe avec UnitEnum
if (Gate::has(Abilities::VIEW_DASHBOARD)) {
// L'ability est définie
}
Cette évolution renforce la sûreté de typage dans votre code d’autorisation.
Corrections et améliorations diverses
Cette série de releases corrige plusieurs problèmes :
- 12.46.0 : Correction du préfixe de table non appliqué lors du clonage de connexions, ajout des options de verrouillage DDL MySQL
- 12.45.2 : Correction de
Validator::appendRules()avec les règles séparées par pipes, correction detoArray()surAnonymousResourceCollection - 12.45.1 : Correction de
ResourceCollectionutilisé avec un tableau simple au lieu d’une collection de modèles
Points d’attention
- Les méthodes
onlyValues()etexceptValues()préservent les clés du tableau original - Le mode
strictutilise l’opérateur===pour la comparaison containsManyItems()sans callback vérifie simplementcount > 1
Ressources
À propos de Laravel Actu
Développeur passionné par Laravel et son écosystème.
Voir tous les articles