You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在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")

  // 其他业务字段...
}

逻辑说明

  1. 直接关联(DirectCallbackReference):保留你原有逻辑,用于记录当前回调直接更新的那个历史回调(比如C直接关联B,B直接关联A)。
  2. 原始回调(OriginalCallbackRoot):专门追踪链中的最原始回调:
    • 当创建全新无关联的回调时,originalId留空(或根据业务需求指向自身)。
    • 当创建关联回调时:
      • 如果关联的reference回调已经有original,则当前回调的original设为该original。
      • 如果关联的reference回调没有original(即它本身是原始回调),则当前回调的original设为reference本身。

注意事项

  • 不要给originalId加@unique约束,因为多个回调需要关联同一个原始回调。
  • 两组关联的@relation名称必须唯一,Prisma会根据这个名称识别不同的关联关系。

内容的提问来源于stack exchange,提问作者Cytronic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:55:12