Laravel中如何屏蔽特定关键词(如用户名)的搜索结果?
解决方案
我明白你的需求了——当搜索特定关键词(比如"auth username")时,要返回空结果而不是所有好友列表。咱们可以通过在查询前先判断搜索词是否属于屏蔽列表来实现,这样既高效又能精准控制结果。
具体实现思路:
- 定义屏蔽关键词列表:把需要拦截的搜索词统一放在数组里,后续要加新关键词直接往数组里加就行。
- 前置拦截判断:先检查用户输入的搜索词是否命中屏蔽列表,如果命中直接返回空集合;没命中再执行原有的好友查询逻辑。
修改后的完整代码:
$searchVal = $request->input('search'); // 定义需要屏蔽的搜索词,可按需扩展 $blockedTerms = ['auth username']; // 先判断是否命中屏蔽词 if ($searchVal && in_array($searchVal, $blockedTerms)) { // 匹配屏蔽词,直接返回空结果 $friend_data = collect(); } else { // 原有查询逻辑,仅在搜索词未被屏蔽时执行 $friend_data = Friend::with('getAccept', 'getRequest') ->where('status', '1') ->where(static function ($q) use ($user) { $q->where('user_id', $user->id)->orWhere('ref_id', $user->id); }) ->when($searchVal, function ($q1) use ($searchVal) { $q1->whereHas('getRequest', function ($q) use ($searchVal) { $q->where('username', 'LIKE', '%' . $searchVal . '%'); })->orWhereHas('getAccept', function ($q) use ($searchVal) { $q->where('username', 'LIKE', '%' . $searchVal . '%'); }); }) ->get(); }
小细节优化说明:
- 我把原代码里的
if($searchVal)判断替换成了Laravel Eloquent的when()方法,这是框架推荐的条件查询写法,代码更简洁优雅,功能和原逻辑完全一致。 - 直接返回空集合
collect()比让数据库查询后返回空结果更高效,省去了不必要的数据库交互开销。
内容的提问来源于stack exchange,提问作者Kiran Ajudiya
相关产品推荐
相关产品推荐

