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

Laravel 10 Eloquent HasMany关联添加where like过滤的实现问题

问题解决方法

你的问题出在集合方法和查询构建器方法的混淆上:

当前代码里$user->registrations会直接执行查询,把该用户的所有registrations数据加载到内存中变成Collection实例,之后调用的where是集合的方法,它的匹配逻辑和数据库的LIKE规则不一致,而且是在内存中做过滤,导致达不到你想要的实时模糊查询效果。

正确的做法是使用查询构建器在数据库层面完成过滤,只需要把$user->registrations改成$user->registrations()(加上括号,获取关联的查询构建器实例),再链式调用where条件即可:

public function getSuggestions()
{
    $user = Auth::user();
    return $user->registrations()
        ->where('registration', 'like', '%' . $this->search . '%')
        ->get();
}

额外优化建议

如果你的Laravel版本是9及以上,可以用更简洁的whereLike方法简化代码:

public function getSuggestions()
{
    return Auth::user()->registrations()
        ->whereLike('registration', "%{$this->search}%")
        ->get();
}

另外,建议处理$this->search为空的情况,避免不必要的模糊查询:

public function getSuggestions()
{
    $query = Auth::user()->registrations();
    
    if ($this->search) {
        $query->where('registration', 'like', '%' . $this->search . '%');
    }
    
    return $query->get();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:39:54