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

Laravel 5.5关联模型查询异常:服务与用户模型搜索返回空集合

问题分析与解决方案

嘿,我一眼就看出问题所在啦!你当前的查询语句用了where + whereHas的组合,这会让数据库执行AND逻辑——也就是要求service_name匹配关键词的同时,关联的用户name也必须匹配关键词,这显然和你想要的「在Service或关联User中搜索」的需求不符,这就是返回空集合的原因~

正确的查询写法

你需要把第二个whereHas替换成orWhereHas,这样就能实现OR逻辑,满足「service_name匹配 或者 关联用户name匹配」的搜索需求:

$items = Service::where('service_name', 'LIKE', "%{$query}%")
    ->orWhereHas('user', function($q) use ($query){
        $q->where('name', 'LIKE', "%{$query}%");
    })->get();

额外优化建议

如果你的数据库对大小写敏感(比如MySQL使用了区分大小写的排序规则),可以通过统一转换为小写来实现大小写不敏感的搜索,避免因为大小写差异漏查结果:

use Illuminate\Support\Facades\DB;

$lowerQuery = strtolower($query);
$items = Service::whereRaw('LOWER(service_name) LIKE ?', ["%{$lowerQuery}%"])
    ->orWhereHas('user', function($q) use ($lowerQuery){
        $q->whereRaw('LOWER(name) LIKE ?', ["%{$lowerQuery}%"]);
    })->get();

这样处理后,不管用户输入的是大写还是小写关键词,都能匹配到对应的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:04:07