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

Autocomplete组件城市名称重复显示问题排查求助

问题原因分析

你遇到的重复显示城市的问题很明确——你的查询语句返回了所有符合条件的会议记录,而不是去重后的城市列表。

看你的search方法里的这段代码:

$cities = Conference::where('city', 'LIKE', '%'.$search.'%')->get();

这条查询会把所有city包含搜索关键词的会议都查出来,哪怕多个会议属于同一个城市(比如你例子里的Newcastle对应两个会议),所以遍历这个集合的时候,会给同一个城市生成多条重复的data项,最终接口返回重复结果,导致 autocomplete 里显示两次Newcastle。

解决方案

你需要对城市结果做去重处理,有几种简单的实现方式:

方式1:在数据库层面去重(推荐)

直接用distinct()方法让数据库返回唯一的城市值,同时只选择city字段,减少数据传输:

$cities = Conference::where('city', 'LIKE', '%'.$search.'%')
    ->distinct()
    ->pluck('city');

然后遍历的时候直接用去重后的城市列表:

foreach ($cities as $city) {
    $data[] = [
        'category' => 'Cities', 
        'value' => $city, 
        'url' => 'conferences/where/city/'.$city
    ];
}

方式2:在集合层面去重

如果需要保留完整的模型数据(不过这里你只需要city字段,所以方式1更高效),可以用集合的unique()方法:

$cities = Conference::where('city', 'LIKE', '%'.$search.'%')
    ->get()
    ->unique('city');

这样遍历的时候每个城市只会出现一次。

验证效果

修改后,当你输入"New"时,$cities会只包含一个"Newcastle"的条目,接口返回的data数组里也只会有一条对应城市的记录,autocomplete就不会重复显示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:32:59