gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:43:51 25 4
gpt4 key购买 nike

我正在创建现有 API 的 GraphQL 实现。我将 Laravel 5.8 与 Lighthouse 3.7 结合使用。

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

方案.graphql

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
}

用户搜索.php

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;
}

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

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

我知道出了什么问题 - resolve 函数中的 $users 返回一个可交互对象 - 而不是模型 - 比如 hasManybelongsTo 返回。我想知道执行此操作的正确方法是什么。

最佳答案

无需使用自定义解析器即可实现您尝试执行的操作。

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

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 扩展它.

关于php - 在 Laravel/Lighthouse GraphQL API 中实现搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56713311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com