4

我的数据库中有几个相关的表:

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 过滤的房间,其格式可以查询它们的关系(如上面的示例)?

4

0 回答 0