如何在Prisma中创建数据库计算字段?附schema.prisma代码示例(MySQL)
在MySQL + Prisma场景下动态生成gamesPlayed字段的实现方案
当然可以实现,你可以借助MySQL的**生成列(Generated Column)**来让gamesPlayed字段自动计算totalWon、totalDrawn、totalLost三者之和,Prisma完全支持映射这种数据库原生特性。
修改后的Prisma Schema代码
model Teams { id String @id @default(uuid()) leagueId String? name String place String totalWon Int @default(0) totalDrawn Int @default(0) totalLost Int @default(0) // 数据库自动计算的生成列,值为三者之和 gamesPlayed Int @db.Generated("ALWAYS", "totalWon + totalDrawn + totalLost") totalPoints Int @default(0) goalsFor Int @default(0) goalsAgainst Int @default(0) }
关键说明
@db.Generated("ALWAYS", "totalWon + totalDrawn + totalLost")是核心配置:- 第一个参数
"ALWAYS"表示该字段的值完全由数据库维护,不允许手动写入,能确保数据一致性;如果需要允许手动覆盖值,可以改用"STORED",但这里推荐用ALWAYS - 第二个参数是MySQL可识别的计算表达式,直接指定三个字段的求和逻辑
- 第一个参数
后续操作
- 执行
prisma migrate dev命令,Prisma会生成对应的数据库迁移文件并应用到MySQL,自动创建带生成列的Teams表 - 之后无论你是新增团队数据,还是修改
totalWon/totalDrawn/totalLost的值,数据库都会自动更新gamesPlayed的数值,无需在TypeScript代码里手动计算
额外提示
- 对于已存在的Teams表,执行迁移时数据库会自动为已有数据计算
gamesPlayed的初始值,无需手动补全 - 查询数据时,Prisma会直接返回数据库计算好的
gamesPlayed值,和普通字段的使用方式完全一致
内容的提问来源于stack exchange,提问作者Bernardao
相关产品推荐
相关产品推荐

