Laravel 12.46 : Nouveaux helpers de filtrage par valeur et méthode containsManyItems

L
Laravel Actu
4 min

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 de toArray() sur AnonymousResourceCollection
  • 12.45.1 : Correction de ResourceCollection utilisé avec un tableau simple au lieu d’une collection de modèles

Points d’attention

  • Les méthodes onlyValues() et exceptValues() préservent les clés du tableau original
  • Le mode strict utilise l’opérateur === pour la comparaison
  • containsManyItems() sans callback vérifie simplement count > 1

Ressources

À propos de Laravel Actu

Développeur passionné par Laravel et son écosystème.

Voir tous les articles
Partager :

Ne manquez aucune actualité Laravel

Recevez les meilleurs articles et tutoriels directement dans votre boîte mail.

Pas de spam. Désinscription possible à tout moment.