node.js graphql / sequelize server为链接属性返回null

时间:2018-01-20 08:05:54

标签: node.js sequelize.js graphql-js

我有一个node.js服务器,它使用sequelize和graphql来提供GraphQL端点。

在GraphQL查询输出中,与belongsTo链接的某些对象字段始终为null

这是我的graphql typedef:

type Student {
  id: ID!
  name: String!
  age: Int!
  schoolClass: SchoolClass
}

type SchoolClass {
  id: ID!
  title: String!
}

以下是如何定义续集模型

const SchoolClass = sequelize.define('SchoolClass', {
  title: Sequelize.STRING
});

const Student = sequelize.define('Student', {
  name: Sequelize.STRING,
  age: Sequelize.TINYINT
});

Student.belongsTo(SchoolClass);

解析器是

students (root, args, context) {
    return models.Student.findAll({}, context);
}

查询:

{ 
  students { 
    id, name, age, schoolClass { id } 
  } 
}

典型输出:

{
  "data": {
    "students": [
      {
        "id": "1",
        "name": "John",
        "age": "18",
        "schoolClass": null
      }
    ]
  }
}

有没有办法获取实际数据而不是空值?

1 个答案:

答案 0 :(得分:2)

默认情况下,Sequelize在调用findAll时不会填充关系创建的任何字段。您必须使用include选项指定要包含查询的关系。有关详细信息,请参阅the docs

此外,findAll只接受一个参数(一个选项对象),而且我不太确定你要通过将上下文传递给模型来做什么。这应足以让所有学生与他们相关的学校课程:

return models.Student.findAll({ include: [ 'SchoolClass' ] })

Check out the reference代表findAll了解有关可以使用的选项的更多信息。