首页 > 其他分享 >Prisma 避坑指南!

Prisma 避坑指南!

时间:2023-06-30 17:00:45浏览次数:37  
标签:指南 Prisma String db prisma 避坑 env test id

  • 环境变量问题
datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL")
}
  1. npx prisma db push 默认取 .env 配置文件,那多环境怎么处理?

  2. 增加 .env.test .env.prod 等文件, 安装 dotenv-cli ,执行 dotenv -e .env.test -- npx prisma db push 来指定 prisma 的运行环境

  3. 实际项目中与 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 环境呢?

  4. 执行命令 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()的时间,
        • updateAtmysql 里面想自动更新的话,需要设置字段类型timestamp,字段值:CURRENT_TIMESTAMP,以及根据时间戳更新。这里转化成 prisma 语法如上 @default(dbgenerated("NOW() ON UPDATE NOW()")) @db.Timestamp(0)

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

标签:指南,Prisma,String,db,prisma,避坑,env,test,id
From: https://www.cnblogs.com/zcookies/p/17517270.html

相关文章

  • Git命令详细使用指南
    Git命令详细使用指南Git是一种广泛使用的版本控制系统,它可以帮助开发人员跟踪变更、协作项目和有效管理代码仓库。无论你是初学者还是有经验的用户,理解各种Git命令对于高效的代码管理至关重要。安装根据Git官方网站(https://git-scm.com)上提供的说明下载和安装Git。安装完成后,你......
  • 【Android Kotlin】全网最全的Android Kotlin入门教程指南,入股不亏
    前言2017年的谷歌大会上,Kotlin被指定为官方的Android开发语言,从长远的角度来看,Kotlin语言是作为Android开发者必须要掌握的一门编程语言。Kotlin编程语言极易上手,而且它不像Java那样代码繁琐,Kotlin代码更简洁,可读性也更强,可以花更少的时间来编写和理解代码,极大地提高了工作效率,不仅......
  • 动态规划入门指南
     动态规划入门指南动态规划是一种解决复杂问题的方法,它可以将一个问题分解为若干个子问题,并利用子问题的最优解来构造原问题的最优解。动态规划适用于具有重叠子问题和最优子结构的问题,即子问题之间有相互依赖的关系,且子问题的最优解可以推导出原问题的最优解。本文将介绍动态......
  • 掌握 Linux awk 命令全面指南
    掌握Linuxawk命令全面指南聆听世界的鱼 Linux公社 2023-06-2809:10 发表于浙江收录于合集#awk命令1个#awk3个#Linux命令85个#Linux742个击上方蓝字 ●关注Linux公社    本文提供了关于Linux中awk命令的全面指南,介绍了它的用法和常见参数。我们深......
  • 可观测性是什么? 入门指南
    如果您之前对可观测性重要性,益处,以及组成不甚了解,本文是一个合适的指南手册。什么是可观测性?可观测性被定义为根据系统产生的输出数据(如日志,指标和链路追踪)来衡量当前系统运行状态的能力。可观测性目前被广泛的用于提升分布式IT系统的稳定性(系统复杂度成倍提升,在故障或者异常......
  • 可观测性是什么? 入门指南
    如果您之前对可观测性重要性,益处,以及组成不甚了解,本文是一个合适的指南手册。什么是可观测性?可观测性被定义为根据系统产生的输出数据(如日志,指标和链路追踪)来衡量当前系统运行状态的能力。可观测性目前被广泛的用于提升分布式IT系统的稳定性(系统复杂度成倍提升,在故障或者异常时很......
  • 【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实
    为什么要使用不可变集合不可变集合包括元组和冻结集合,其特点是不能被修改。元组有序、不可变、可包含不同类型元素,不能进行修改、删除操作,可通过索引访问元素。冻结集合是一种无序的集合类型,内部元素不能修改、添加或删除,因此常用于处理集合的不可变。不可变对象有很多优点不可变对......
  • Conda 命令深入指南
    Conda命令深入指南Conda是一个功能强大的包管理系统,允许您为不同的项目创建和管理隔离的环境,从而更轻松地处理不同的依赖项集。安装可以按照Conda官方网站(https://conda.io)上提供的说明下载并安装Conda。安装后,可以打开终端或命令提示符并开始使用Conda。创建和管......
  • .NET Core RSA 指南与增强扩展 RSAExtensions
    .NETCoreRSA指南与增强扩展RSAExtensions 一.前言#RSA作为最常用的非对称加密算法,在我们的实际使用中还是比较常见的,特别是对接支付十有八九都会遇到,或者是其他需要数据安全的业务场景。在.NETFramework以及.NETCore❤️.0时,.NET自带的RSA对象仅支持XML标准形......
  • Android架构开发进阶指南,Android Jetpack Compose强化实战
    在我们日常的开发中,如果所有人各自为战,没有统一规范,久而久之,项目代码会变得混乱且后续难以维护。而这时,许多人就会使用Jetpack这个由多个库组成的套件,来减少样板代码,以便将精力更多的集中于重要的编码工作上面。统一的架构模式通常会给我们带来诸多好处,如:统一开发规范,使得代码整洁......