Конструктор запросов Laravel, фильтрация с помощью include и exclude - PullRequest
0 голосов
/ 28 июня 2018

У меня проблема с какой-то определенной логикой включения / исключения в моем запросе.

таблицы корзины имеют много специфических_фруктов. 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
   })
...