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

Laravel 10控制器多Where子句搜索返回空集合问题解决

多字段搜索查询解决方案

你之前用多Where子句返回空集合,核心原因是默认的where是AND逻辑——要求title、description、intro三个字段同时包含搜索关键词才会返回结果,这种场景几乎很难匹配到数据。正确的做法是使用OR逻辑,只要任意一个字段匹配关键词就返回结果。

以下是几种Laravel框架下的实现方式(替换YourModel为你实际的模型类,比如Post/Article):

方式一:链式调用orWhere

直接通过orWhere串联多个字段的匹配条件:

// 获取搜索框输入的关键词
$keyword = request()->get('search');

// 构建多字段搜索查询
$items = YourModel::where('title', 'like', "%{$keyword}%")
    ->orWhere('description', 'like', "%{$keyword}%")
    ->orWhere('intro', 'like', "%{$keyword}%")
    ->get();

方式二:用whereRaw简化多字段查询

如果需要搜索的字段较多,whereRaw写法更简洁,且Laravel会自动处理参数绑定,避免SQL注入:

$keyword = request()->get('search');

$items = YourModel::whereRaw(
    "title like ? or description like ? or intro like ?",
    ["%{$keyword}%", "%{$keyword}%", "%{$keyword}%"]
)->get();

方式三:结合when处理空搜索场景

如果用户未输入关键词时不想返回全表数据,可以用when做条件判断,同时用闭包包裹orWhere避免和其他查询条件冲突:

$keyword = request()->get('search');

$items = YourModel::query()
    ->when($keyword, function ($query) use ($keyword) {
        return $query->where(function ($subQuery) use ($keyword) {
            $subQuery->where('title', 'like', "%{$keyword}%")
                ->orWhere('description', 'like', "%{$keyword}%")
                ->orWhere('intro', 'like', "%{$keyword}%");
        });
    })
    ->get();

将最终得到的$items变量传递到search.blade.php中渲染即可。

内容的提问来源于stack exchange,提问作者tooManyDivs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:35:08