求助:如何在Prisma同一模型上定义多组自关联?
解决方案:新增独立自关联追踪原始回调
你需要拆分出两组独立的自关联关系:一组用于记录直接关联的父回调(保留原有的历史关联逻辑),另一组专门用于指向最原始的根回调。Prisma允许同一个模型定义多组不同名称的自关联,只要每组的@relation名称唯一即可。
调整后的Prisma模型代码
model Callback { id String @id @default(cuid()) // 原有直接关联逻辑:记录当前回调直接关联的历史回调 referenceId String? reference Callback? @relation("DirectCallbackReference", fields: [referenceId], references: [id]) referenceOf Callback[] @relation("DirectCallbackReference") // 新增原始回调关联:所有关联回调统一指向链中的根回调 originalId String? original Callback? @relation("OriginalCallbackRoot", fields: [originalId], references: [id]) originalOf Callback[] @relation("OriginalCallbackRoot") // 其他业务字段... }
逻辑说明
- 直接关联(DirectCallbackReference):保留你原有逻辑,用于记录当前回调直接更新的那个历史回调(比如C直接关联B,B直接关联A)。
- 原始回调(OriginalCallbackRoot):专门追踪链中的最原始回调:
- 当创建全新无关联的回调时,
originalId留空(或根据业务需求指向自身)。 - 当创建关联回调时:
- 如果关联的
reference回调已经有original,则当前回调的original设为该original。 - 如果关联的
reference回调没有original(即它本身是原始回调),则当前回调的original设为reference本身。
- 如果关联的
- 当创建全新无关联的回调时,
注意事项
- 不要给
originalId加@unique约束,因为多个回调需要关联同一个原始回调。 - 两组关联的
@relation名称必须唯一,Prisma会根据这个名称识别不同的关联关系。
内容的提问来源于stack exchange,提问作者Cytronic
相关产品推荐
相关产品推荐

