首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prisma2 prisma内省返回外键的奇怪值

Prisma2 prisma内省返回外键的奇怪值
EN

Stack Overflow用户
提问于 2020-04-24 12:06:53
回答 1查看 699关注 0票数 3

我有两张桌子,UserRelationship。这些表用于存储父级子关系。我正在使用Postgres

// schema.sql

代码语言:javascript
复制
CREATE TABLE "public"."Relationships" (
    id SERIAL PRIMARY KEY NOT NULL,
    parent_id INT NOT NULL,
    FOREIGN KEY (parent_id) REFERENCES "User" (id),
    child_id INT NOT NULL,
    FOREIGN KEY (child_id) REFERENCES "User" (id)
)

CREATE TABLE "public"."User" (
    id SERIAL PRIMARY KEY NOT NULL,
    name VARCHAR(128) NOT NULL,
    email VARCHAR(128) UNIQUE,
    password VARCHAR(128) NOT NULL,
    isChild BOOLEAN NOT NULL DEFAULT false
    created_at TIMESTAMP NOT NULL DEFAULT NOW();
);  

当我运行npx prisma introspect时,schema.prisma文件中将返回以下内容。

// schema.prisma

代码语言:javascript
复制
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Relationships {
  child_id                           Int
  id                                 Int  @default(autoincrement()) @id
  parent_id                          Int
  User_Relationships_child_idToUser  User @relation("Relationships_child_idToUser", fields: [child_id], references: [id])
  User_Relationships_parent_idToUser User @relation("Relationships_parent_idToUser", fields: [parent_id], references: [id])
}

model User {
  created_at                                  DateTime        @default(now())
  email                                       String?         @unique
  id                                          Int             @default(autoincrement()) @id
  ischild                                     Boolean         @default(false)
  name                                        String?
  password                                    String
  Relationships_Relationships_child_idToUser  Relationships[] @relation("Relationships_child_idToUser")
  Relationships_Relationships_parent_idToUser Relationships[] @relation("Relationships_parent_idToUser")
}

我不明白User_Relationships_child_idToUserUser_Relationships_parent_idToUser是什么,为什么它们不仅仅是Prisma文档教程中为外键出现的简单语法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-24 12:26:13

Prisma的内省为每个外键生成两个字段:

  • 关系标量域(基本上是外键的直接表示)
  • 关系字段(用@relation属性注释)- these似乎使您感到困惑。它们提供的原因是您可以轻松地在Prisma客户端API中处理这些关系。

您可以在docs 这里中找到有关这方面的更多信息。

当然,User_Relationships_parent_idToUserUser_Relationships_child_idToUser不是很好的名字。您可以在内省和重命名关系字段之后手动调整模式,使其具有更友好的名称,例如:

代码语言:javascript
复制
model Relationships {
  child_id  Int
  id        Int  @default(autoincrement()) @id
  parent_id Int
  child     User @relation("Relationships_child_idToUser", fields: [child_id], references: [id])
  parent    User @relation("Relationships_parent_idToUser", fields: [parent_id], references: [id])
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61407977

复制
相关文章

相似问题

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