* 環境變數問題 ```typescript datasource db { provider = "mysql" url = env("DATABASE_URL") } ``` 1. `npx prisma db push` 預設取 .env 配置文件,那多環境怎麼處理? 2. 增加 `.env. ...
- 環境變數問題
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 的問題,歡迎一起探討!