【问题标题】:Prisma client not marking property as nullPrisma 客户端未将属性标记为空
【发布时间】:2022-02-08 19:35:11
【问题描述】:

我使用的是 Prisma 版本 3.8.1。 Prisma 客户端不会在 TS 中将 User.oauthData 属性标记为可为空。有人可以帮忙吗? Prisma 架构和生成的 SQL 文件如下:

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
  binaryTargets = ["native", "rhel-openssl-1.0.x"]
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Account {
  id BigInt @id
  createdAt DateTime @db.Timestamptz(3) @default(now())
  updatedAt DateTime @db.Timestamptz(3) @updatedAt
  name String
  users User[]
}

model User {
  id BigInt @id
  createdAt DateTime @db.Timestamptz(3) @default(now())
  updatedAt DateTime @db.Timestamptz(3) @updatedAt
  accountId BigInt
  account Account @relation(fields: [accountId], references: [id])
  fullName String
  email String
  oauthData Json?
}

-- CreateTable
CREATE TABLE "Account" (
    "id" BIGINT NOT NULL,
    "createdAt" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "updatedAt" TIMESTAMPTZ(3) NOT NULL,
    "name" TEXT NOT NULL,

    CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "User" (
    "id" BIGINT NOT NULL,
    "createdAt" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "updatedAt" TIMESTAMPTZ(3) NOT NULL,
    "accountId" BIGINT NOT NULL,
    "fullName" TEXT NOT NULL,
    "email" TEXT NOT NULL,
    "oauthData" JSONB,

    CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);

-- AddForeignKey
ALTER TABLE "User" ADD CONSTRAINT "User_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

我使用的是 Prisma 版本 3.8.1。 Prisma 客户端不会在 TS 中将 User.oauthData 属性标记为可为空。有人可以帮忙吗? Prisma 架构和生成的 SQL 文件如下:

【问题讨论】:

  • 那么TS类型是怎样的呢?你跑prisma generate了吗?
  • 我确实运行了 prisma generate。 TS 类型将其标记为非可选
  • 可选和可空是不同的东西。你能只显示我们正在谈论的类型吗?我已经在本地尝试了您的架构,它工作正常,类型可以按预期为空。
  • 在哪个文件中可以找到生成的用户类型的代码?尽管基于 VS 代码智能感知弹出窗口,但它肯定被标记为不可为空。
  • 在可以看到弹出窗口的地方按 F12。基本上应该在node_modules/.prisma/client/index.d.ts

标签: prisma prisma2


【解决方案1】:

使用 JSONB 字段时,允许使用两种类型的 null:JSON null 和 DB null。

这在the Prisma docs for working with JSON fields中有更详细的解释。

为避免数据库允许的两种null 之间的歧义,我们允许以下两个值之一:

  • Prisma.DbNull:数据库中的值为NULL。
  • Prisma.JsonNull:数据库中的值包含一个为空的 JSON 值。

这就是这两个空值在数据库中的样子(与您共享的架构相同):

prisma-script> select id, "oauthData" from "User"
+---------+-------------+
| id      | oauthData   |
|---------+-------------|
| 124124  | null        |
| 1241241 | <null>      |
+---------+-------------+

您还可以在模型User的生成类型中看到这一点

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多