Nat*_*han 3 cockroachdb prisma
我正在尝试在本地使用 Prisma 和 Cockroachdb 。据我所知,对 CockroachDB 的官方支持正在进行中。
我有一个并行的本地 PostgreSQL 数据库,其中一切工作正常,并且我能够生成 Prisma 迁移以针对 Cockroachdb 手动运行。所有这些都有效,我最终得到了两个明显相同的模式。
但是,Prisma 中使用该connect功能的任何创建操作都会失败,并出现以下错误:
Invalid `prisma.mylinkedtable.create()` invocation:
Foreign key constraint failed on the field: `(not available)`
Run Code Online (Sandbox Code Playgroud)
以下是我的 schema.prisma 的关键部分:
datasource db {
provider = "postgresql"
url = "postgresql://user:pass@localhost:26257/mydb"
}
generator client {
provider = "prisma-client-js"
previewFeatures = ["cockroachdb"]
}
model MyLinkedEntity {
id Int @id @default(autoincrement())
myEntity MyEntity @relation(fields: [myEntityId], references: [id])
myEntityId Int
// ...
}
model MyEntity {
id Int @id @default(autoincrement())
// ...
}
Run Code Online (Sandbox Code Playgroud)
触发外键约束的代码:
const entity = await prisma.myEntity.findFirst({})
await prisma.myLinkedEntity.create({
data: {
myEntityId: entity.id,
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
如果我稍微不同地处理它并尝试使用该connect功能进行链接:
await prisma.myLinkedEntity.create({
data: {
myEntity: {
connect: {
id: entity.id
}
},
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个不同的错误:
Invalid `prisma.myLinkedEntity.create()` invocation:
An operation failed because it depends on one or more records that were required but not found. No 'MyEntity' record(s) (needed to inline the relation on 'MyLinkedEntity' record(s)) was found for a nested connect on one-to-many relation 'MyEntityToMyLinkedEntity'.
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
看起来相关行并未首先创建。
您可以尝试使用connectOrCreate吗?https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#connect-or-create-a-record
Prisma 模型也可能存在问题。我不确定顺序是否重要,但我注意到您在它引用的 ID 之前定义了关系。
最后一点,不相关的一点:您不应该使用自动递增整数作为 CockroachDB 中的键。请参阅https://www.cockroachlabs.com/docs/v21.2/schema-design-table#primary-key-best-practices
| 归档时间: |
|
| 查看次数: |
11990 次 |
| 最近记录: |