Prisma 避坑指南!
- 环境变量问题
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
-
npx prisma db push默认取 .env 配置文件,那多环境怎么处理? -
增加
.env.test.env.prod等文件, 安装dotenv-cli,执行dotenv -e .env.test -- npx prisma db push来指定 prisma 的运行环境 -
实际项目中与 nodejs (koa、egg、midway、nest)等框架结合使用时,如 midway.js ,包含内置配置文件为 config.test.ts 启动使用
NODE_ENV来指定环境变量 ,启动命令如下cross-env NODE_ENV=test pm2 start ./bootstrap.js --name=midway-app -i 2。那么怎么让 prisma 知道是 test 环境呢? -
执行命令
dotenv -e .env.test -- cross-env NODE_ENV=test pm2 start ./bootstarp.js --name=midway-app -i 2
-
Prisma ORM 创建关系型数据库时,如何不创建外键,依然能够关联查询?
- 很简单,增加
relationMode = "prisma",选择prisma模式。 注意索引@@index()
datasource db { provider = "mysql" url = env("DATABASE_URL") relationMode = "prisma" }model User { id String @id @default(uuid()) roleId String? role UserRole? @relation(fields: [roleId], references: [id]) @@index([roleId]) @@map("user_admin") } model UserRole { id String @id @default(uuid()) code String @db.VarChar(32) name String @db.VarChar(32) User User[] @@map("user_role") } - 很简单,增加
-
Prisma 使用
@createAt与@updateAt时差问题怎么解决?(这里是mysql,其它应该同理)-
prisma 使用了
@createAt与@updateAt在其引擎内部处理时,同一处理成了UTC时间格式,也就是比北京时间慢8个小时。(mysql 、linux 时间均正常的情况下)-
可能引擎是国外开发的吧,想自动创建时间,以及修改自动更新时间的话,上面两种不能采取。使用如下方式取代:
model Dept { id Int @id @default(autoincrement()) name String @db.VarChar(255) desc String @db.VarChar(255) createAt DateTime @default(dbgenerated("NOW()")) @db.DateTime updateAt DateTime @default(dbgenerated("NOW() ON UPDATE NOW()")) @db.Timestamp(0) @@map("user_dept") }- 使用
NOW(),其实也就是select now()的时间, updateAt在mysql里面想自动更新的话,需要设置字段类型timestamp,字段值:CURRENT_TIMESTAMP,以及根据时间戳更新。这里转化成prisma 语法如上@default(dbgenerated("NOW() ON UPDATE NOW()")) @db.Timestamp(0)
- 使用
-
-
如果有其它关于 prisma 的问题,欢迎一起探讨!

浙公网安备 33010602011771号