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

Prisma中如何给模型添加无关联的对象数组字段?

实现方案

Prisma本身不支持直接定义无关联的对象数组字段,但可以靠PostgreSQL的JSONB类型搞定,具体步骤如下:

1. 修改Prisma Schema

把User模型里的favorites字段定义成Json类型(对应PostgreSQL的JSONB),默认值设为空数组:

model User {
  id        Int     @id @default(autoincrement())
  // 其他字段按需保留
  favorites Json    @default("[]") @db.JsonB
}

2. 同步数据库结构

跑下面的命令生成迁移并更新数据库:

npx prisma migrate dev --name add-favorites-jsonb

3. 补全类型安全(可选但实用)

虽然不能用Prisma的type定义,但可以自己写TypeScript类型来避免操作数组时出错:

type FavoriteItem = {
  id: number;
  title: string;
};

// 查询后转成定义好的类型
const user = await prisma.user.findUnique({ where: { id: 1 } });
const favorites = user?.favorites as FavoriteItem[];

4. 实际操作示例

  • 创建带收藏列表的用户:
await prisma.user.create({
  data: {
    // 填其他必填字段
    favorites: [{ id: 1, title: 'blah' }, { id: 2, title: 'ok' }]
  }
});
  • 更新用户的收藏列表:
await prisma.user.update({
  where: { id: 1 },
  data: {
    favorites: [{ id: 3, title: 'new track' }]
  }
});

注意点

  • JSONB支持PostgreSQL的原生查询,比如用jsonb_array_elements查数组元素,但Prisma客户端要查的话得用raw或者结合类型断言做过滤。
  • 这种存储方式没有数据库外键约束,数据一致性得自己在业务代码里处理。

内容的提问来源于stack exchange,提问作者Zio-4

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:15:40