graphql - 传递参数子类型 graphql
问题描述
我想知道如何以“子”类型传递参数。有了这个请求,我想只收到来自用户 id 1 的 id 1 的消息。
目前我有这个要求:
{user(id:1){
email,
username,
messages(id:1){
text,
id
}
}}
我在架构中修改了用户类型,并更改了
messages: [Message]
经过
messages(id: Int): [Message]
但我总是收到来自用户的所有消息,而不是具有特定 ID 的消息。
schema.js
import { gql } from 'apollo-server';
export const typeDefs = gql`
# declare custom scalars
scalar Date
##########
## TYPE ##
##########
# a group
type Group {
id: Int!
name: String
users: [User]!
messages: [Message]
}
# a user
type User {
id: Int! # unique id for the user
email: String!
username: String
messages(id: Int): [Message]
groups: [Group]
friends: [User]
}
# a message sent from a user to a group
type Message {
id: Int!
to: Group!
from: User!
text: String!
createdAt: Date!
}
###########
## QUERY ##
###########
# query for types
type Query {
user(email: String, id: Int): User
messages(groupId: Int, userId: Int): [Message]
}
schema {
query: Query
}
`;
export default typeDefs;
解析器.js
import GraphQLDate from 'graphql-date';
import { Group, Message, User } from './connectors';
export const resolvers = {
Date: GraphQLDate,
Query: {
group(_, args) {
return Group.find({ where: args });
},
messages(_, args) {
return Message.findAll({
where: args,
order: [['createdAt', 'DESC']],
});
},
user(_, args) {
return User.findOne({ where: args });
},
},
Group: {
users(group) {
return group.getUsers();
},
messages(group) {
return Message.findAll({
where: { groupId: group.id },
order: [['createdAt', 'DESC']],
});
},
},
Message: {
to(message) {
return message.getGroup();
},
from(message) {
return message.getUser();
},
},
User: {
messages(user) {
return Message.findAll({
where: { userId: user.id },
order: [['createdAt', 'DESC']],
});
},
groups(user) {
return user.getGroups();
},
friends(user) {
return user.getFriends();
},
},
};
export default resolvers;
解决方案
您必须更新User.messages
解析器。这边走:
User: {
messages(user, { id }) {
return Message.findAll({
where: { userId: user.id, id },
order: [['createdAt', 'DESC']],
});
},
groups(user) {
return user.getGroups();
},
friends(user) {
return user.getFriends();
},
},
如果你想让id
参数可选,这样的事情可能会有所帮助:
messages(user, { id }) {
const where = { userId: user.id }
if (id) {
where.id = id
}
return Message.findAll({
where,
order: [['createdAt', 'DESC']],
});
},
推荐阅读
- r - 使用 R 中的条件计算数据框对象中的行数
- sockets - 将套接字消息发送到具有相同 IP 和端口的不同 UDP 连接
- php - 如何从 EXCEL 中获取 PHP 中的分组行?
- visual-studio - 如何打开/关闭 .NET Core 应用程序的 Docker 支持?
- ios - 更改 UINavigationBar 的前导边距和后边距
- php - SQLSRV 参数化查询在 GROUP BY 子句中永远存在
- python - 试图将 5 个卡值传递给函数,但不起作用
- tsql - 按时间段分组记录
- java - 使用 Firebase 的聊天应用
- kendo-ui - 资源的 Kendo Scheduler TimeLineView,将每个事件显示为好像它的 allDay 事件