我的数据库中有几个相关的表:
rooms
桌子:
"id" SERIAL PRIMARY KEY,
"details" jsonb,
"metadata" jsonb,
"region" character varying(255) NOT NULL DEFAULT 'uk'::character varying,
"createdAt" timestamp with time zone NOT NULL,
"updatedAt" timestamp with time zone NOT NULL,
"houseId" integer REFERENCES houses(id) ON DELETE SET NULL ON UPDATE CASCADE
houses
桌子:
"id" SERIAL PRIMARY KEY,
"coordinates" jsonb,
"type" jsonb NOT NULL,
"region" character varying(255) NOT NULL DEFAULT 'uk'::character varying,
"createdAt" timestamp with time zone NOT NULL,
"updatedAt" timestamp with time zone NOT NULL,
"blockId" integer REFERENCES blocks(id) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT "houses_originalProdId_region_key" UNIQUE ("originalProdId", region)
在我的项目中,我使用 PostGraphile (graphile-utils) 作为我的 GraphQL 提供程序。
rooms
我创建了一个自定义解析器来使用 Sequelize执行动态构建的复杂查询。我选择通过 Sequelize 而不是直接通过 PostGraphile 查询数据库,因为查询对象的各个部分是动态构建的(where
对象和include
数组)。
解析器如下所示:
async (_query, args) => {
const { input, pagination } = args;
const filteredRooms = await roomRepository.findRoomsUsingDynamicFilters(
pagination,
input,
);
return filteredRooms || null;
}
此查询有效,但现在无法为房间加载关系,因此我无法house
通过相关过滤房间进行查询:
{
filterRooms(input: { filterByAttributes: ["large", "white"] }, pagination: {}) {
house{
id
}
}
}
结果是
{
"data": {
"filterRooms": [
{
"house": null
},
{
"house": null
},
{
"house": null
},
]
}
}
在 PostGraphile 文档中,我找到了selectGraphQLResultFromTable
似乎加载关系的方法,但我不确定如何将它与 Sequelize 查询结合使用;也就是说,我的解析器如何仅返回我通过 Sequelize 过滤的房间,其格式可以查询它们的关系(如上面的示例)?