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

如何在Laravel Lighthouse的@search指令中使用Meilisearch过滤器

解决Laravel Lighthouse @search指令添加Meilisearch过滤条件的问题

问题原因

你当前把搜索关键词和过滤条件混杂在同一个search参数里,不符合Lighthouse @search指令的设计逻辑——该指令默认仅处理搜索关键词,无法识别字符串中嵌套的过滤规则。

解决方案

1. 修改GraphQL查询定义

新增独立的filter参数,专门用于传递过滤条件:

type Query {
  movies(search: String @search, filter: String): [Movie!]! @paginate
}

2. 在模型中扩展Scout搜索逻辑

重写Movie模型的search方法,读取filter参数并将其应用到Meilisearch查询:

use Laravel\Scout\Searchable;

class Movie extends Model
{
    use Searchable;

    public static function search($query, $callback = null)
    {
        // 初始化Scout搜索构建器
        $searchBuilder = parent::search($query, $callback);

        // 获取GraphQL请求中的filter参数
        $filterCondition = request()->input('filter');

        // 若存在过滤条件,直接传递给Meilisearch
        if ($filterCondition) {
            $searchBuilder->filter($filterCondition);
        }

        return $searchBuilder;
    }
}

3. 发起正确的GraphQL查询

使用分离的变量分别传递搜索关键词和过滤条件:

query FetchMovies($search: String, $filter: String) {
  movies(search: $search, filter: $filter) {
    id
    title
    release_date
    # 按需添加其他返回字段
  }
}

对应的查询变量:

{
  "search": "Avengers",
  "filter": "release_date > 795484800"
}

验证说明

该方案的逻辑和你之前成功调用的Curl请求完全对齐,会将filter参数直接映射到Meilisearch的filter查询项,确保过滤规则生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:36:28