
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.

#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.
Fuente: Harris Raftopoulos
Artículos relacionados
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión