如何根据JSON数据生成包含多层关联的复杂Prisma Schema模型
Prisma 模型转换结果
结构说明
- 主模型为
Item,与Option、Addition为一对多关联 Option模型与OptionItem(对应JSON中的list字段)为一对多关联- Image对象提供两种实现方案,可根据你使用的数据库选择:
- 方案1:PostgreSQL等支持复合类型的数据库,直接定义复合类型无需单独建表
- 方案2:兼容所有数据库,直接平铺字段到
Item模型,无需额外关联
完整Prisma Schema代码
// 方案1:使用PostgreSQL复合类型定义Image type Image { title String url String } model Item { id Int @id @default(autoincrement()) name String image Image // 复合类型Image description String price Int options Option[] additions Addition[] } // 方案2:兼容所有数据库的Image实现,替换上述Item里的image字段即可 // model Item { // id Int @id @default(autoincrement()) // name String // imageTitle String // imageUrl String // description String // price Int // options Option[] // additions Addition[] // } model Addition { id Int @id @default(autoincrement()) name String price Int itemId Int item Item @relation(fields: [itemId], references: [id], onDelete: Cascade) } model Option { id Int @id @default(autoincrement()) name String itemId Int item Item @relation(fields: [itemId], references: [id], onDelete: Cascade) optionItems OptionItem[] // 对应JSON中的list字段 } model OptionItem { id Int @id @default(autoincrement()) name String price Int optionId Int option Option @relation(fields: [optionId], references: [id], onDelete: Cascade) }
查询返回匹配JSON结构的示例
你可以通过嵌套include查询出完整关联数据,简单处理后就能和你给出的JSON结构完全匹配:
const rawItem = await prisma.item.findUnique({ where: { id: 1 }, include: { options: { include: { optionItems: true } }, additions: true } }) // 字段名转换,把optionItems改为list const formattedItem = { ...rawItem, options: rawItem.options.map(opt => ({ ...opt, list: opt.optionItems })) }
内容的提问来源于stack exchange,提问作者Hasibur Rahman
相关产品推荐
相关产品推荐

