You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何屏蔽特定关键词(如用户名)的搜索结果?

解决方案

我明白你的需求了——当搜索特定关键词(比如"auth username")时,要返回空结果而不是所有好友列表。咱们可以通过在查询前先判断搜索词是否属于屏蔽列表来实现,这样既高效又能精准控制结果。

具体实现思路:

  1. 定义屏蔽关键词列表:把需要拦截的搜索词统一放在数组里,后续要加新关键词直接往数组里加就行。
  2. 前置拦截判断:先检查用户输入的搜索词是否命中屏蔽列表,如果命中直接返回空集合;没命中再执行原有的好友查询逻辑。

修改后的完整代码:

$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:32:41