Filtrado de colecciones más preciso con whereNotInStrict de Laravel

  • Publicado el 03 febrero, 2025
  • Palabras: 67

¿Necesitas un filtrado más preciso en tus colecciones? El método whereNotInStrict proporciona un filtrado de comparación estricto, lo que garantiza coincidencias exactas de tipo y valor al excluir elementos.

Filtrado de colecciones más preciso con whereNotInStrict de Laravel

#Uso básico

El método whereNotInStrict elimina elementos de la colección que tienen un valor de elemento especificado que está contenido dentro de la colección dada, para ello hace uso de una comparación "esctricta"

 

$collection = collect([
    ['id' => 1, 'value' => '100'],
    ['id' => 2, 'value' => 100],
    ['id' => 3, 'value' => '200'],
    ['id' => 4, 'value' => 200]
]);

// Regular filtering (loose comparison)
$loose = $collection->whereNotIn('value', [100]);
// Result: Only items with value '200' and 200

// Strict filtering (type-sensitive)
$strict = $collection->whereNotInStrict('value', [100]);
// Result: Items with value '100', '200', and 200
// (keeps string '100' because 100 !== '100')

 

#Ejemplo práctico

A continuación se explica cómo podría usarlo en un sistema de filtrado de productos:

 

class ProductFilter
{
    public function filterByExactStock($products, array $excludedStockLevels)
    {
        // Strict filtering ensures exact stock level matches
        return $products->whereNotInStrict('stock_level', $excludedStockLevels);
    }

    public function filterByPreciseStatus($products, array $statuses)
    {
        return $products
            ->whereNotInStrict('status', $statuses)
            ->values();
    }

    public function applyFilters($products)
    {
        return $products
            // Exclude specific numeric codes (type-sensitive)
            ->whereNotInStrict('product_code', ['001', '002'])
            // Exclude specific string statuses (type-sensitive)
            ->whereNotInStrict('status', ['active', 'pending'])
            // Re-index array
            ->values();
    }
}

// Usage
$products = collect([
    ['product_code' => '001', 'status' => 'active'],
    ['product_code' => 1, 'status' => 'active'],    // Different type
    ['product_code' => '002', 'status' => 'pending'],
    ['product_code' => 2, 'status' => 'inactive']
]);

$filter = new ProductFilter();
$filtered = $filter->applyFilters($products);
// Keeps items where product_code is numeric
// and status is not exactly 'active' or 'pending'

 

El método whereNotInStrict garantiza un filtrado sensible al tipo cuando necesita un control preciso sobre el contenido de su colección.

Antonio Jenaro

Desarrollador backend especializado en PHP y Laravel, con sede en Santander, Cantabria. Más de 15 años de experiencia en el desarrollo de aplicaciones web a medida y en la modernización de código heredado.

Archivado en:

Fuente: Harris Raftopoulos

Artículos relacionados

Cómo organizar colecciones con el método splitIn de Laravel
199

Cómo organizar colecciones con el método splitIn de Laravel

Generar colecciones sobre la marcha con el método times de Laravel
2264

Generar colecciones sobre la marcha con el método times de Laravel

Conversión de valores en colecciones con el método wrap de Laravel
639

Conversión de valores en colecciones con el método wrap de Laravel

Cómo encontrar elementos duplicados en colecciones de Laravel
605

Cómo encontrar elementos duplicados en colecciones de Laravel

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión