Точне фільтрування колекцій із використанням whereNotInStrict у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 26 березня, 2025
Вам коли-небудь доводилось стикатися з проблемами точного співпадіння типів під час фільтрації колекцій у Laravel? У нашій статті ми розглянемо, як метод whereNotInStrict допомагає точно виключати значення, забезпечуючи цілісність даних та уникаючи небажаних збігів. Читайте далі, щоб дізнатися більше

Коли вам потрібна точна відповідність типів під час фільтрації колекцій, метод Laravel whereNotInStrict забезпечує точні результати, адже він гарантує, що повинні відповідати як значення, так і типи під час виключення.

$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);

Використання whereNotInStrict дозволяє зберегти цілісність даних під час фільтрації, поважаючи повну ідентичність ваших значень та запобігаючи ненавмисному збігу при роботі з різними типами даних або введенням користувачів.

Популярні

Logomark Logotype

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом

Logomark Logotype

Простий пакет RabbitMQ для Laravel

Вам цікаво дізнатися, як спростити інтеграцію RabbitMQ у вашому Laravel-додатку? У нашій статті ми розглянемо пакет Simple RabbitMQ, який дозволяє легко налаштувати багатозʼєднання, публікувати повідомлення та обробляти черги за допомогою простого синтаксису. Читайте далі, щоб дізнатися більше!

Logomark Logotype

Обробка геопросторових даних за допомогою Laravel Magellan

Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!