Prisma2 prisma introspect, возвращающий странные значения для внешних ключей - PullRequest
1 голос
/ 24 апреля 2020

У меня есть две таблицы, User и Relationship. Таблицы используются для хранения родительских и дочерних отношений. Я использую Postgres

// схему. 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. учебник.

1 Ответ

1 голос
/ 24 апреля 2020

Самоанализ Prisma создает два поля для каждого внешнего ключа:

  • скалярное поле отношения (в основном прямое представление внешнего ключа)
  • a поле отношения (аннотировано атрибутом @relation) - это те поля, которые вас смущают. Причина, по которой они предоставляют, заключается в том, что вы можете легко работать с отношениями в API клиента Prisma.

Более подробную информацию об этом можно найти в документации здесь .

Конечно, User_Relationships_parent_idToUser и User_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])
}
...