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

在Laravel中使用LIKE查询数据库表时无返回结果如何解决

问题原因
  • 代码中直接调用Auth::user()->friends(关联属性不带括号)时,获取的是已经执行完SQL查询返回的Eloquent集合(Collection),并非数据库查询构造器实例。
  • Laravel 集合的where方法仅支持简单的等于匹配逻辑,无法识别LIKE这类SQL操作符,因此添加LIKE条件后无法匹配到符合要求的结果,无返回内容。
解决办法

方案1:使用查询构造器完成SQL层面的模糊查询(推荐,性能更优)

在关联名后加括号返回查询构造器实例,直接在数据库层面执行LIKE匹配,效率更高,适合数据量较大的场景:

Auth::user()
    ->friends() // 加括号返回查询构造器,触发SQL查询
    ->where('friend.first_name', 'LIKE', '%' . $firstName . '%')
    ->get(); // 查询构造器使用get方法获取结果,不要用集合的all方法

方案2:在已有集合上做模糊匹配

如果已经提前获取了全量好友集合,也可以用集合的filter方法自定义匹配逻辑实现模糊查询:

$matchedFriends = Auth::user()
    ->friends
    ->filter(function ($friend) use ($firstName) {
        // PHP8及以上可直接用str_contains,低版本可以用strpos !== false代替
        return str_contains($friend->first_name, $firstName);
    })
    ->all();
补充注意点

如果数据库first_name字段的排序规则是大小写敏感的,可调整条件忽略大小写匹配,避免遗漏结果:

// SQL层面忽略大小写示例
Auth::user()
    ->friends()
    ->whereRaw('LOWER(friend.first_name) LIKE ?', ['%' . strtolower($firstName) . '%'])
    ->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:51:03