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
Antonio Jenaro

Web Developer

Archivado en:

Fuente: Harris Raftopoulos

Artículos relacionados

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

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

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

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
594

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

Cómo encontrar elementos duplicados en colecciones de Laravel
534

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