首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建多到多关系类型-graphql类型

如何创建多到多关系类型-graphql类型
EN

Stack Overflow用户
提问于 2022-04-05 23:01:52
回答 1查看 585关注 0票数 0

我正在进行一个使用type-graphql和typeorm的项目。我有两个实体:膳食和食材,我希望在这两个实体之间建立许多到许多的关系。

我在我的Meal.ts文件中添加了以下代码:

代码语言:javascript
复制
@Field(() => [Ingredient])
@ManyToMany(() => Ingredient, ingredient => ingredient.meals, { onUpdate: "NO ACTION" })
@JoinTable({ joinColumn: { name: "meal_id" }, inverseJoinColumn: { name: "ingredient_id" } })
ingredients!: Promise<Ingredient[]>

以及我的Ingredient.ts文件中的以下代码:

代码语言:javascript
复制
@Field(() => [Meal])
@ManyToMany(() => Meal, meal => meal.ingredients, { onUpdate: "NO ACTION" })
meals!: Promise<Meal[]>

此外,我还为我的迁移编写了以下代码:

代码语言:javascript
复制
CREATE TABLE "meal_ingredient" (
  "id" uuid NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY,
  "meal_id" uuid NOT NULL,
  "ingredient_id" uuid NOT NULL,
  FOREIGN KEY ("meal_id") REFERENCES "meal"("id") ON DELETE CASCADE ON UPDATE NO ACTION,
  FOREIGN KEY ("ingredient_id") REFERENCES "ingredient"("id") ON DELETE CASCADE ON UPDATE NO ACTION
)

我认为这充分建立了我想要的两个实体之间的关系(尽管如果我错了,请告诉我)。我想知道的是,我需要在Resolver文件中添加什么才能将一顿饭和一份配料联系起来?这意味着,如果我有给定的膳食和配料,我如何在解析器中定义一个突变,以便在meal_ingredient表中创建一行,以便以后可以查询该餐的配料或配料的膳食。

EN

回答 1

Stack Overflow用户

发布于 2022-04-06 01:28:29

您需要一个FieldResolver (博士)来查询关系数据,无论是在一对多的关系中还是在多到多的关系中:

代码语言:javascript
复制
@Resolver(() => Ingredient)
class IngredientResolver {
  // your other query and mutations

  @FieldResolver(() => Meal)
  async getMeal(@Root() meal: Meal): Promise<Meal | undefined> { 
    // Root is equivalent to parent in graphql
    return Meal.findOne(meal.id) // use this syntax if your Entity extends BaseEntity 
  }
}

请注意,这将导致graphql的典型n+1问题,这意味着当您获取一个成分数组时,对于每个配料,graphql必须对属于每个成分的膳食执行db查询,n+1问题的解决方案是使用批处理数据请求的数据机

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71759327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档