Laravel查询构建器多值搜索问题:拆分搜索词实现OR匹配
解决方案
你可以通过拆分搜索关键词,再逐个添加OR LIKE条件来实现需求,以下是两种可行的实现方式:
方式一:使用orWhere循环构建条件
$search_term = "Hary Kumar"; // 拆分搜索词为关键词数组,同时过滤空值(处理多空格情况) $keywords = array_filter(explode(' ', trim($search_term))); $filterData = DB::table('signups'); // 为每个关键词添加OR LIKE条件 foreach ($keywords as $keyword) { $filterData->orWhere('name', 'LIKE', "%{$keyword}%"); }
这段代码会生成你需要的SQL语句:
select * from signups where name like "%Hary%" or name like "%Kumar%"
方式二:使用whereRaw拼接条件
$search_term = "Hary Kumar"; $keywords = array_filter(explode(' ', trim($search_term))); // 生成每个关键词对应的LIKE条件片段 $conditions = array_map(function($keyword) { return "name LIKE '%{$keyword}%'"; }, $keywords); // 用OR拼接所有条件,通过whereRaw加入查询 $filterData = DB::table('signups') ->whereRaw(implode(' OR ', $conditions));
注意事项
- 使用
array_filter是为了处理搜索词中包含多个连续空格的情况,避免生成无效的LIKE '%%'条件。 - 如果需要区分大小写,可以根据数据库类型调整,比如MySQL中可以用
LIKE BINARY,或者在查询时设置大小写敏感规则。
内容的提问来源于stack exchange,提问作者ITtraders Nepal
相关产品推荐
相关产品推荐

