У меня проблема с какой-то определенной логикой включения / исключения в моем запросе.
таблицы корзины имеют много специфических_фруктов. Specific_fruits имеет регулярное выражение и имеет поле для включения или исключения.
столбцы таблицы специфических_фруктов:
«ЛОГИКА», «РЕГЭКС»
Запись:
«включить», «яблоко»
«исключить», «груша»
Сначала я включаю все строки со словом «яблоко». Это работает правильно. Однако после этого я хочу исключить все фруктовые строки, которые также имеют слово «груша».
Например:
'яблочный банан' должен быть включен
«яблочная груша» не должна.
Включения работают правильно. Регулярное выражение работает правильно. Когда запрос получает исключение .. он по-прежнему возвращает корзины, которые уже были включены.
Корзины, которые уже были «включены» в первую функцию WHERE, необходимо как-то исключить.
DB::table('examples')
->join('baskets', 'examples.basket_id', 'baskets.id')
->leftJoin('specific_fruit', 'specific_fruit.baskets.id', 'baskets.id')
->where(function($query) use ($request) {
$query->where('specific_fruit.logic', 'include') // we're including these
->whereRaw('? ~ specific_fruit.regex', ['apple pear']) // we want to include all "apple"
->orWhere('specific_fruit.logic', 'exclude') // grab all excluded fruit for now, we'll purge the ones next step
})
->where(function($query) use ($user_data, $request) {
$query->where('specific_fruit.logic', 'include') // retain the included fruit from the previous query
->orWhere('specific_fruit.logic', 'exclude') // when we exclude these, it's not removing the ones that are already "included"
->whereRaw('? !~ specific_fruit.regex',['apple pear']) // if regex DOES NOT match (!~), exclude that basket
})