GraphQL无法使查询正常工作

时间:2018-08-05 08:37:02

标签: graphql knex.js bookshelf.js

我有两个表类别和子类别定义为

CREATE TABLE `categories` (
`id` int(11) NOT NULL,
`name` varchar(300) DEFAULT NULL,
`image` varchar(300) DEFAULT NULL
);

AND

CREATE TABLE `sub_categories` (
`id` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL,
`cat` int(11) DEFAULT NULL,
`type` int(11) NOT NULL,
) 

sub_categories 表中的 cat 字段是 categories 表中 id 的外键

GraphQL模式定义为

export const schema = `
type Category {
id:    ID
name: String
image: String
subcategories : [SubCategory]
}`

AND

type SubCategory {
id:    ID
name: String
cat: Int
type: Int
}

我在Bookshelf.js中的数据库模型也是

const Category = db.Model.extend({
tableName: 'categories',
subcats: function () {
return this.hasMany(SubCategory,"cat");
}
})

我的GraphQL查询为

async getAllCategories() {
const allCats = await Category
  .fetchAll()
  .then(cats => {
    return cats.toJSON()
  })
return allCats

}

现在我打电话

{
 getAllCategories {
  id
  name
  subcategories {
   id
   name
  }
 }
}

我的回应是

{
"data": {
"getAllCategories": [
  {
    "id": "1",
    "name": "usa",
    "subcategories": null
  },
  {
    "id": "2",
    "name": "japan",
    "subcategories": null
  },
 ]
 }
}

这里的子类别字段为null,在这里我想获取由sub_categories表中的外键猫连接的特定类别中的所有子类别。

1 个答案:

答案 0 :(得分:0)

由于它不是自动的,因此您必须急于加载子类别:

const allCats = await Category
  .fetchAll({withRelated: 'subcats'})
  .then(cats => {
    return cats.toJSON()
  })