Laravel查询构建器,使用包含和排除进行过滤

时间:2018-06-28 16:32:59

标签: php laravel postgresql laravel-query-builder

我在查询中有一些特定的包含/排除逻辑问题。

餐篮有很多specific_fruits。 Specific_fruits具有正则表达式,并具有包含或排除字段。

specific_fruit表列:
'LOGIC','REGEX'

条目:
'包括','苹果'
“排除”,“梨”

首先,我将所有包含'apple'的字符串包括在内。这可以正常工作。但是,在那之后,我要排除所有所有带有“梨”字样的水果串。

例如:
应该包括“苹果香蕉”
“苹果梨”不应该。

其中包括正常工作。正则表达式可以正常工作。当查询被排除..时,它仍然返回已经包含在内的购物篮。

已经在第一个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
   })

0 个答案:

没有答案