温馨提示:本文翻译自stackoverflow.com,查看原文请点击:postgresql - Prisma2 prisma introspect returning weird values for foreign keys
postgresql prisma prisma-graphql

postgresql - Prisma2 pyramida内省返回外键的怪异值

发布于 2020-08-03 06:53:19

我有两个表,UserRelationship这些表用于存储父子关系。我在用Postgres

// schema.sql

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

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_idToUser以及User_Relationships_parent_idToUser它们为什么不只是Prisma文档教程中为外键显示的简单语法。

查看更多

提问者
Tristan
被浏览
9
nburk 2020-04-24 20:26

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

  • 关系标量场(基本上是外键的直接代表)
  • 一个关系字段(带注释的@relation属性) -这些似乎迷惑你的字段。它们提供的原因是,您可以在Prisma Client API中轻松处理这些关系。

您可以在文档中找到有关此信息的更多信息 此处

当然,User_Relationships_parent_idToUserUser_Relationships_child_idToUser是不是很漂亮的名字。内省之后,您可以手动调整架构,并将关系字段重命名为更友好的名称,例如:

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])
}