Я настраиваю распознаватели для GraphQL API прямо сейчас и сталкиваюсь с некоторыми проблемами/вопросами, касающимися функции findAll() из sequenceize.
У меня есть эти 2 резольвера:
User: async (parent, { id }, { models }) => {
return await models.User.findAll({
where: {
ID_User: id
}
});
}
UserPK: async (parent, { id }, { models }) => {
return await models.User.findByPk(id);
}
Модели:
type Query {
UserPK(id: ID): User
User(id: ID): User
}
type User {
ID_User: ID,
Username: String,
}
Если я сейчас запущу эти запросы
{
UserPK(id: 1) {
ID_User
Username
}
User(id: 1) {
ID_User
Username
}
}
Только UserPK возвращает (правильные) данные, пользовательский запрос возвращает null для каждого поля, что меня смущает, потому что запросы, которые выполняются, выполняются точно так же.
Executing (default): SELECT `ID_User`, `Username` FROM `User` AS `User` WHERE `User`.`ID_User` = '1';
Executing (default): SELECT `ID_User`, `Username` FROM `User` AS `User` WHERE `User`.`ID_User` = '1';
Кстати, я использую сервер apollo, если это имеет значение.





Разница между findByPk и findAll в том, что findByPk возвращает уже один элемент, тогда как findAll возвращает и массив. Вы, кажется, не принимаете это во внимание. После этого резолверы для User получают массив, из которого они не могут читать свойства.
return (await models.User.findAll({
where: {
ID_User: id
}
}))[0];
Иногда все резолверы скрытый не помогают, когда дело доходит до ошибок :( Рад, что теперь это работает!
Ах, это имеет так много смысла сейчас. Спасибо за быстрый ответ, теперь оба возвращают то же самое!