我在Laravel中有一个雄辩的查询,看起来像这样:
return $query->with('status', 'bank')
->whereHas('status', function (Builder $builder) {
return $builder->whereIn('bank_status', ['MANUAL', 'VALIDATED,ACTIVATED']);
});
我正在寻找与给定值匹配的任何可能值:['MANUAL', 'VALIDATED,ACTIVATED']
我有逗号分隔值。
我不确定它是否是使用whereIn
的正确选择,还是应该使用在这种情况下最适合使用的rawsql find_in_set()
?
如果有人有答案,最好使用find_in_set()
感谢
答案 0 :(得分:0)
在laravel中尝试这种类型的查询
$search = VALIDATED;
->whereRaw("find_in_set('".$search."',MANUAL)")
答案 1 :(得分:0)
如果您的列中包含逗号分隔值,则应使用find_in_set()
而不是in
。如果您的列行具有以下值'VALIDATED,ACTIVATED'
,并且您将使用ACTIVATED
搜索IN
,则它将失败并且不会返回任何行。
return $query
->with('status', 'bank')
->whereHas('status', function (Builder $builder) use ($needle){
return $builder->whereRaw('FIND_IN_SET(?, bank_status)', [$needle]);
});
有关您的问题的更多信息 - FIND_IN_SET() vs IN()