Laravel
February 23
Точная фильтрация коллекций в Laravel с помощью `whereNotInStrict`
Вам нужна точная фильтрация в коллекциях? Метод `whereNotInStrict
` в Laravel обеспечивает строгую сравнительную фильтрацию, гарантируя точное совпадение типа и значения при исключении элементов.
Базовое использование
Фильтрация коллекций со строгой проверкой типов:
$collection = collect([ ['id' => 1, 'value' => '100'], ['id' => 2, 'value' => 100], ['id' => 3, 'value' => '200'], ['id' => 4, 'value' => 200] ]); // Обычная фильтрация (нестрогое сравнение) $loose = $collection->whereNotIn('value', [100]); // Результат: Только элементы со значением '200' и 200 // Строгая фильтрация (с учетом типа) $strict = $collection->whereNotInStrict('value', [100]); // Результат: Элементы со значениями '100', '200' и 200 // (оставляет строку '100', потому что 100 !== '100')
Реальный пример
Рассмотрим, как её можно использовать в системе фильтрации товаров:
class ProductFilter { public function filterByExactStock($products, array $excludedStockLevels) { // Строгая фильтрация обеспечивает точное соответствие уровню запасов return $products->whereNotInStrict('stock_level', $excludedStockLevels); } public function filterByPreciseStatus($products, array $statuses) { return $products ->whereNotInStrict('status', $statuses) ->values(); } public function applyFilters($products) { return $products // Исключение определенных цифровых кодов (с учетом типа) ->whereNotInStrict('product_code', ['001', '002']) // Исключение определенных строк состояния (с учетом типа) ->whereNotInStrict('status', ['active', 'pending']) // Переиндексация массива ->values(); } } // Использование $products = collect([ ['product_code' => '001', 'status' => 'active'], ['product_code' => 1, 'status' => 'active'], // Другой тип ['product_code' => '002', 'status' => 'pending'], ['product_code' => 2, 'status' => 'inactive'] ]); $filter = new ProductFilter(); $filtered = $filter->applyFilters($products); // Сохраняются товары, product_code которых имеет числовое // значение, а статус не равен 'active' или 'pending'.
Метод `whereNotInStrict
` обеспечивает фильтрацию с учетом типов, когда требуется точный контроль над содержимым коллекции.