id: {
type: INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
email: {
type: STRING,
unique: true,
allowNull: false,
validate: {
notEmpty: true,
isEmail: true,
},
},
},
})
Модель Role:
const Role = db.define(
'role',
{
name: {
type: STRING,
unique: true,
allowNull: false,
validate: {
notEmpty: true,
},
},
},
})
Role.associate = ({ User }) => {
Role.belongsTo(User, {
foreignKey: {
name: 'createdBy',
field: 'createdBy',
},
})
}
Мне нужно получить информацию о пользователе, не делая второй запрос на получение пользователя по ID в поле createdBy
Схема GraphQL
extend type Query {
roles(offset: Int, limit: Int): [Role!]
}
type User {
id: Int!
email: EmailAddress!
}
type Role {
id: Int!
name: String!
createdBy: User!
}
Я создаю пользователя и роль, добавляя только что созданного пользователя в качестве создателя роли:
const testScenario = async ({ DataTable, Role, User }) => {
const kanyeWest = await User.create({
email: 'kanye.west@gmail.com',
})
await Role.create({
name: 'Admin',
createdBy: kanyeWest
}
Когда я пытаюсь получить список ролей, получаю ошибку: "message": "Cannot return null for non-nullable field User.id."
query Roles {
roles(offset: 0, limit: 5) {
id
name
createdBy {
id
email
}
}
}
Но, если я изменю поле createdBy в схеме на Int, я получу айдишник пользователя
Что может быть не так? Как можно исправить это, чтоб получать полную инфу о пользователе
скорее всего вы не загружаете пользователя из базы в ресолвере
Обсуждают сегодня