Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel/Lighthouse GraphQL API中实现搜索功能_Php_Laravel_Graphql_Laravel Lighthouse - Fatal编程技术网

Php 在Laravel/Lighthouse GraphQL API中实现搜索功能

Php 在Laravel/Lighthouse GraphQL API中实现搜索功能,php,laravel,graphql,laravel-lighthouse,Php,Laravel,Graphql,Laravel Lighthouse,我正在创建一个现有API的GraphQL实现。我用的是Laravel5.8和Lighthouse 3.7 我想知道如何实现一个搜索功能使用这个-东西沿线的 scheme.graphql UserSearch.php 公共函数解析($rootValue,array$args,GraphQLContext$context,ResolveInfo$ResolveInfo) { $q=app('db')->表('users'); foreach($args作为$key=>$value){ $q->whe

我正在创建一个现有API的GraphQL实现。我用的是Laravel5.8和Lighthouse 3.7

我想知道如何实现一个搜索功能使用这个-东西沿线的

scheme.graphql UserSearch.php
公共函数解析($rootValue,array$args,GraphQLContext$context,ResolveInfo$ResolveInfo)
{
$q=app('db')->表('users');
foreach($args作为$key=>$value){
$q->where($key,$value);
}
$users=$q->get();
返回$users;
}
这将起作用-但仅适用于查询返回的字段

{
    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”:“参数1传递给Nuwave\\Lighthouse\\Schema\\Directives\\RelationDirective::Nuwave\\Lighthouse\\Schema\\Directives\\{closure}()必须是Lightlight\\Database\\Eloquent\\Model的实例,给定stdClass的实例,在第221行的/mnt/x/Data/www/Projects/Phoenix/vendor/nuwave/lighthouse/src/Schema/Factories/FieldFactory.php中调用“


我知道出了什么问题,
resolve
函数中的
$users
正在返回一个可交互的对象,而不是像
这样的模型有许多
属于返回的对象。我想知道做这件事的正确方法是什么。

您尝试做的事情应该可以不用使用自定义解析器

你应该可以用下面这样的东西来做

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
}

在这里,我们利用并扩展了一些。

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

users(q: String @search): [User]
@paginate(model: "App\\Models\\User")

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

您可能需要在解析器中加入一些
->(“城市”)
(左?)您尝试执行的操作不需要使用自定义解析器即可完成。只要在你的参数上使用
eq
指令就可以了,这很有帮助,但并不完全是我想要的。在返回数据之前,我想在解析器中添加一些过滤器(比如status=1和其他一些过滤器)。您可以使用scope指令完成这一操作,然后将作用域添加到您的用户模型中。否则,如果你能给出一个你真正想要的完整的例子,那么我会尽力帮助你。
users(q: String @search): [User]
@paginate(model: "App\\Models\\User")