find_in_set()sql和whereIn laravel之间的区别

时间:2017-10-25 08:06:19

标签: php mysql database laravel

我在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()感谢

转换我的查询构建器

2 个答案:

答案 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()