首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Laravel/Lighthouse应用程序接口中实现搜索功能

在Laravel/Lighthouse应用程序接口中实现搜索功能
EN

Stack Overflow用户
提问于 2019-06-22 14:55:58
回答 2查看 2.3K关注 0票数 3

我正在创建一个现有应用程序接口的GraphQL实现。我使用的是Laravel 5.8和Lighthouse 3.7。

我想知道如何使用这个实现搜索功能-类似于...

scheme.graphql

代码语言:javascript
复制
type Query {
    userSearch(name: String, email: String, phone: String, city_id: Int): [User] #Custom Resolver - app/GraphQL/Queries/UserSearch.php
}
type User {
    id: ID!
    name: String!
    email: String
    phone: String
    credit: Int
    city_id: Int
    city: City @belongsTo
}

UserSearch.php

代码语言:javascript
复制
public function resolve($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
{
    $q = app('db')->table('users');
    foreach($args as $key => $value) {
        $q->where($key, $value);
    }
    $users = $q->get();

    return $users;
}

这是可行的--但只适用于查询返回的字段。

代码语言:javascript
复制
{
    userSearch(name:"Picard") {
        id          # This will work
        name        # This will work
        city {      # These wont.
            id      # These won't work
            name    # These won't work
        }
    }
}

当我尝试的时候,我会得到这个错误...

"debugMessage": "Argument 1 passed to Nuwave\\Lighthouse\\Schema\\Directives\\RelationDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}() must be an instance of Illuminate\\Database\\Eloquent\\Model, instance of stdClass given, called in /mnt/x/Data/www/Projects/Phoenix/vendor/nuwave/lighthouse/src/Schema/Factories/FieldFactory.php on line 221"

我知道出了什么问题-- resolve函数中的$users返回的是一个可交互的对象,而不是像hasManybelongsTo那样返回的模型。我想知道怎样做才是正确的。

EN

回答 2

Stack Overflow用户

发布于 2019-06-26 05:27:56

您尝试做的事情不需要使用自定义的解析器也是可能的。

您应该能够使用如下所示的内容来完成此操作

代码语言:javascript
复制
type Query {
    userSearch(name: String @eq, email: String @eq, phone: String @eq, city_id: Int @eq): [User] @paginate
}
type User {
    id: ID!
    name: String!
    email: String
    phone: String
    credit: Int
    city_id: Int
    city: City @belongsTo
}

在这里,我们使用paginate method并使用一些constraints对其进行扩展。

票数 2
EN

Stack Overflow用户

发布于 2021-06-18 17:34:18

我在整个项目中尝试的最好方法是在User模型中添加一个公共静态scopeSearch函数并在那里执行搜索,然后轻松地使用以下代码进行搜索:

代码语言:javascript
复制
users(q: String @search): [User]
@paginate(model: "App\\Models\\User")

@search将在您的模型中触发搜索功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56713311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档