【问题标题】:How to create one to one relationship instead of one to many in Prisma如何在 Prisma 中创建一对一关系而不是一对多关系
【发布时间】:2022-10-25 15:08:02
【问题描述】:

我有这些棱镜模型

model OrderDetail {
    id        String @id @default(cuid())
    orderId   String
    address   String
    city      String
    country   String
    postalCode String
    phone     String
    createdAt DateTime @default(now())
    updatedAt DateTime @updatedAt
    order     Order   @relation(fields: [orderId], references: [id], onDelete: Cascade)
}

model Order {
    id          String   @id @default(cuid())
    createdAt   DateTime @default(now())
    updatedAt   DateTime @updatedAt
    user        User     @relation(fields: [userId], references: [id], onDelete: Cascade)
    userId      String   
    orderItems  OrderItem[]
    orderDetails OrderDetail[] // cant have no arrays
}

如果我从orderDetails OrderDetail[] 中删除[],我会在OrderDetailorder @relation 中收到以下类型错误

解析属性“@relation”时出错:关系字段order on 型号OrderDetail 不得指定onDeleteonUpdate @relation 属性中的参数。您只能在 模型Order上的对面字段orderDetails

order @relation 中删除onDelete: Cascade 后,错误就是这个

解析属性“@relation”时出错:关系字段order on 型号OrderDetail 是必需的。这不再有效,因为它是 无法在数据库级别强制执行此约束。请 将字段类型从 Order 更改为 Order? 以解决此问题。

我只想在那里建立一对一的关系,而不是一对多。

怎么修?

【问题讨论】:

  • 你试过第一个错误建议“你必须只在模型订单上的相反字段订单详细信息上指定它。”?
  • 是的,我尝试从OrderDetail 模型中删除order @relation 并在Order 中添加orderDetails @relation,并且还让它们都添加了相似的结果。

标签: typescript prisma


【解决方案1】:

如果您想建立一对一的关系,您必须通过添加 @unique 指令使 orderId 唯一。这样可以保证每个Order 只与OrderDetail 关联一次。

如果该列不是unique,则多个OrderDetails 可以与同一个orderId 相关联,从而使其成为一对多关系。

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2022-01-19
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2022-12-31
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多