postgresql - Prisma2 prisma introspect 返回奇怪的外键值
问题描述
我有两张桌子,User
和Relationship
。这些表用于存储父子关系。我在用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 文档教程中外键出现的简单语法。
解决方案
Prisma 的自省为每个外键生成两个字段:
- 关系标量字段(基本上是外键的直接表示)
- 关系字段(带有属性注释
@relation
)——这些字段似乎让您感到困惑。它们提供的原因是您可以在 Prisma Client API 中轻松处理关系。
您可以在此处的文档中找到有关此的更多信息。
当然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])
}
推荐阅读
- c++ - 与 Windows 窗体通信 C++ 头文件和源文件
- google-analytics - 如何使用 amp-analytics (UA) 跟踪 AMP 中的核心 Web Vitals
- java - 子和父的Java多捕获异常
- angular - 从下拉列表中选择一个选项后隐藏垫选择
- html - 表头不粘在顶部
- python-3.x - 如何使不和谐机器人从在线链接python发送图像
- r - 用先前观察到的值替换 NA 值
- variables - 如何删除 tcl 变量值中不需要的字符?
- python - 如何从 Microsoft Speech Service 中识别的对象中仅获取文本部分
- kubernetes - Kubernetes - 在 1 个实例上执行任务