翼度科技»论坛 编程开发 JavaScript 查看内容

Prisma 避坑指南!

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15

  • 环境变量问题
  1. datasource db {
  2.   provider     = "mysql"
  3.   url          = env("DATABASE_URL")
  4. }
复制代码

  • 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()
    1. datasource db {
    2.   provider     = "mysql"
    3.   url          = env("DATABASE_URL")
    4.   relationMode = "prisma"
    5. }
    复制代码
    1. model User {
    2.   id                   String            @id @default(uuid())
    3.   roleId               String?
    4.   role                 UserRole?         @relation(fields: [roleId], references: [id])
    5.   @@index([roleId])
    6.   @@map("user_admin")
    7. }
    8. model UserRole {
    9.   id        String     @id @default(uuid())
    10.   code      String     @db.VarChar(32)
    11.   name      String     @db.VarChar(32)
    12.   User      User[]
    13.    
    14.   @@map("user_role")
    15. }
    复制代码
  • Prisma 使用 @createAt 与 @updateAt 时差问题怎么解决?(这里是mysql,其它应该同理)

    • prisma 使用了 @createAt 与 @updateAt 在其引擎内部处理时,同一处理成了 UTC 时间格式,也就是比北京时间慢 8个小时。(mysql 、linux 时间均正常的情况下)

      • 可能引擎是国外开发的吧,想自动创建时间,以及修改自动更新时间的话,上面两种不能采取。使用如下方式取代:
        1. model Dept {
        2.   id               Int                @id @default(autoincrement())
        3.   name             String             @db.VarChar(255)
        4.   desc             String             @db.VarChar(255)
        5.   createAt         DateTime           @default(dbgenerated("NOW()")) @db.DateTime
        6.   updateAt         DateTime           @default(dbgenerated("NOW() ON UPDATE NOW()")) @db.Timestamp(0)
        7.   @@map("user_dept")
        8. }
        复制代码

        • 使用 NOW(),其实也就是 select now()的时间,
        • updateAt 在 mysql 里面想自动更新的话,需要设置字段类型timestamp,字段值:CURRENT_TIMESTAMP,以及根据时间戳更新。这里转化成 prisma 语法如上 @default(dbgenerated("NOW() ON UPDATE NOW()")) @db.Timestamp(0)



如果有其它关于 prisma 的问题,欢迎一起探讨!

来源:https://www.cnblogs.com/zcookies/p/17517270.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具