Prisma 避坑指南!

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 的问题,欢迎一起探讨!

相关推荐

八核神舟灵雅x50ts手机怎么样 神舟手机x50ts全面详细评测图解
iphone6s港版美版国行的区别
365提款不到账的吗

iphone6s港版美版国行的区别

📅 07-20 👁️ 6202
水冷与风冷:谁才是静音之王?深入探讨DIY电脑散热方案