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

如何在Laravel Scout中正确使用whereNot查询方法

原因

Laravel Scout 的搜索查询构建器未原生实现whereNot方法,你调用的该方法不会被解析为对应搜索引擎的负向过滤规则,因此这部分过滤逻辑直接被忽略,不会生效。

可用解决方案

方案1:使用whereNotIn方法(适配Scout 9.x及以上版本,支持负向过滤的驱动:Meilisearch、Algolia、Elasticsearch等)

将需要排除的id放入数组,调用Scout原生支持的whereNotIn方法实现负向过滤:

Address::search("{$address->suburb}")
    ->whereNotIn('id', [$address->id])
    ->get();

方案2:搜索结果集合过滤(适配所有驱动,小数据量场景适用)

如果所用驱动不支持服务端负向过滤,或者搜索结果量级很小,可以先拉取全量搜索结果,再在Laravel集合层面做排除:

Address::search("{$address->suburb}")
    ->get()
    ->where('id', '!=', $address->id);

方案3:自定义引擎查询回调(高级场景适用)

如果需要自定义过滤逻辑,可直接通过搜索回调修改引擎侧的查询参数,以Meilisearch为例:

Address::search("{$address->suburb}", function ($engine, string $query, array $options) use ($address) {
    $options['filter'][] = "id != {$address->id}";
    return $engine->search($query, $options);
})->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 17:15:08