我在查询中有一些特定的包含/排除逻辑问题。
餐篮有很多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
})