# @brakebein/prisma-generator-nestjs-dto 中文文档

规范地址：https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/

版本：1\.30\.0
npm 元数据更新时间：2026-06-18T11:51:08.693Z
中文译文更新时间：2026-11-08T13:48:20.756Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40brakebein/prisma-generator-nestjs-dto
原文对照：https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/?lang=original
项目主页：https://github.com/Brakebein/prisma-generator-nestjs-dto#readme
源码仓库：https://github.com/Brakebein/prisma-generator-nestjs-dto

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：197 kB，57 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=14
- 运行依赖：7 个
- peer 依赖：@prisma/client ^5\.16\.0 \|\| ^6\.0\.0 \|\| ^7\.0\.0，prisma ^5\.16\.0 \|\| ^6\.0\.0 \|\| ^7\.0\.0
- 首次发布：2022-03-16T13:21:06.936Z
- 最新版本发布：2026-06-18T11:51:08.590Z
- 近 30 天下载量：37737（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：71（近 12 个月 3 个）

## 中文简介

从 Prisma Schema 为 NestJS 生成 DTO 和实体类

## 安装

```sh
npm install @brakebein/prisma-generator-nestjs-dto
```

也可以使用：`pnpm add @brakebein/prisma-generator-nestjs-dto`、`yarn add @brakebein/prisma-generator-nestjs-dto`、`bun add @brakebein/prisma-generator-nestjs-dto`

## README

# Prisma 发电机 NestJS 数字交换台

[![Release](https://badge.fury.io/js/%40brakebein%2Fprisma-generator-nestjs-dto.svg)](https://www.npmjs.com/package/@brakebein/prisma-generator-nestjs-dto) [![License](https://img.shields.io/github/license/Brakebein/prisma-generator-nestjs-dto.svg?label=license)](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-license)

1.  [这是什么?](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-what-is-it)
2.  [使用量](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-usage)
3.  [说明](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-annotations)
4.  [示例](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-example)
5.  [原则](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-principles)
6.  [许可证](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-license)

## 这是什么?

生成 `ConnectDTO`, (中文(简体) ), `CreateDTO`, (中文(简体) ), `UpdateDTO`, (中文(简体) ), `DTO`,以及 `Entity` 在您的 Prisma Schema 中为模型设置课。 如果您想要发挥杠杆作用, 这会很有用 [打开API](https://docs.nestjs.com/openapi/introduction) 在你身边 [网点JS](https://nestjs.com/) 应用程序 - 但也帮助 GraphQL 资源 。 网点JS Swagger 需要输入参数 : [要通过类描述的控制器](https://docs.nestjs.com/openapi/types-and-parameters) 因为它能利用 TypeScript 所排放的元数据 `Reflection` 为 OpenAPI 光谱生成模型/组件。 对于控制器方法上的反应模型/组件,它也是这样.

这些课也可以与内置 [验证](https://docs.nestjs.com/techniques/validation#using-the-built-in-validationpipe) 财务报告和审定财务报表 [序列化](https://docs.nestjs.com/techniques/serialization)。 。 。 .

这是叉子 [@vigardit/prisma-generator-nestjs-dto (英语)](https://github.com/vegardit/prisma-generator-nestjs-dto) 并添加多个特性:

-   增强字段,并增加计划信息,例如描述,以生成一个 `@ApiProperty()` 装饰( 见 [Schema 对象说明](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-schema-object-annotations)(中文(简体) )
-   可选择添加 [校验装饰](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-validation-decorators)
-   支持复合类型
-   带有额外旗帜的控制输出格式 `flatResourceStructure`, (中文(简体) ), `noDependencies`,以及 `outputType`
-   可选的更美的自动格式输出

见 [变化](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/CHANGELOG.md) 所有改进和改变.

## 用法吗?

```sh
npm install --save-dev @brakebein/prisma-generator-nestjs-dto
```

```prisma
generator nestjsDto {
  provider                        = "prisma-generator-nestjs-dto"
  output                          = "../src/generated/nestjs-dto"
  prismaClientImportPath          = ""
  outputToNestJsResourceStructure = "false"
  flatResourceStructure           = "false"
  exportRelationModifierClasses   = "true"
  reExport                        = "false"
  generateFileTypes               = "all"
  createDtoPrefix                 = "Create"
  updateDtoPrefix                 = "Update"
  dtoSuffix                       = "Dto"
  entityPrefix                    = ""
  entitySuffix                    = ""
  classValidation                 = "false"
  fileNamingStyle                 = "camel"
  noDependencies                  = "false"
  outputType                      = "class"
  definiteAssignmentAssertion     = "false"
  requiredResponseApiProperty     = "true"
  jsdoc                           = "false"
  prettier                        = "false"
  wrapRelationsAsType             = "false"
  showDefaultValues               = "false"
}
```

### 参数

所有参数都是可选的.

| 参数=默认值 | 说明 |
| --- | --- |
| `output = "../src/generated/nestjs-dto"` | 相对于您的输出路径 `schema.prisma` 文件 |
| `prismaClientImportPath = ""` | 覆盖 Prisma 客户端的导入路径 。 默认为任一 `@prisma/client` 或基于生成器客户端输出配置的相对路径(参见 [73号](https://github.com/Brakebein/prisma-generator-nestjs-dto/issues/73)) (中文(简体) ). |
| `outputToNestJsResourceStructure = "false"` | 写入 `dto`s 和 `entities` 改为与 [NestJS CRUD 生成器](https://docs.nestjs.com/recipes/crud-generator)。资源模块名称来源于 `schema.prisma` |
| `flatResourceStructure = "false"` | 若为 `outputToNestJsResourceStructure` 实值 `true`,子文件夹 `dto`s 和 `entities` 在资源文件夹中创建。 设为 `true` 将平整等级. |
| `exportRelationModifierClasses = "true"` | 是否应该输出为DTO外地关系业务而生成的额外类别? |
| `reExport = "false"` | 是否应该为每个文件夹创建索引 ? |
| `generateFileTypes = "all"` | `all`: 生成 DTO 和实体文件, `dto`: 只生成 DTO 文件, `entity`: 只生成实体文件( 无法结合复杂类型) |
| `createDtoPrefix = "Create"` | 词组到前缀 `CreateDTO` 分类 |
| `updateDtoPrefix = "Update"` | 词组到前缀 `UpdateDTO` 分类 |
| `dtoSuffix = "Dto"` | 后缀 `CreateDTO` 财务报告和审定财务报表 `UpdateDTO` 分类 |
| `entityPrefix = ""` | 词组到前缀 `Entity` 分类 |
| `entitySuffix = ""` | 后缀 `Entity` 分类 |
| `fileNamingStyle = "camel"` | 如何命名生成的文件 。 有效的选择是 `"camel"`, (中文(简体) ), `"pascal"`, (中文(简体) ), `"kebab"` 财务报告和审定财务报表 `"snake"`。 。 。 . |
| `classValidation = "false"` | 从 `class-validator`与 `noDependencies = "true"` 财务报告和审定财务报表 `outputType = "interface"`。 。 。 . |
| `noDependencies = "false"` | 任何针对雀巢JS和Prisma的进口和装饰被省略,因此没有提及外部依赖。 如果您想要为前端生成适当的 DTO , 则此选项是有用的 . |
| `outputType = "class"` | 输出 DTO 为 `class` 或作为 `interface`。 。 。 . `interface` 只能用于为前端生成 DTO. |
| `definiteAssignmentAssertion = "false"` | 添加明确的转让断言操作员 `!` ,如果 `strict` 和(或) `strictPropertyInitialization` 设定 `true` 在您的tsconfig。 强森的 `compilerOptions`。 。 。 . |
| `requiredResponseApiProperty = "true"` | 若为 `false`,添加 `@ApiRequired({ required: false })` 以响应 DTO 属性。 否则,使用 `required` 默认总是 `true` 除非字段是可选的. |
| `jsdoc = "false"` | 添加基本的 JSDoc 部分,包含描述和默认值. |
| `prettier = "false"` | 将输出文件固定为更漂亮的文件 . |
| `wrapRelationsAsType = "false"` | 若为 `true`,导入关系作为解决与SWC的循环参考问题的类型(见 [39号](https://github.com/Brakebein/prisma-generator-nestjs-dto/issues/39#issuecomment-2374098494)) (中文(简体) ). |
| `showDefaultValues = "false"` | 若为 `true`,使字段与 `@default` 默认可见属性,而不是使用 `@DtoCreateOptional` 财务报告和审定财务报表 `@DtoUpdateOptional` 每次(见 [51号](https://github.com/Brakebein/prisma-generator-nestjs-dto/issues/51)) (中文(简体) ). |

## 说明

说明提供了更多信息, 帮助生成者理解您的意图 。 它们是作为 [三相斜线评论](https://www.prisma.io/docs/concepts/components/prisma-schema#comments) 在您的 Prisma Schema 中的田间节点。 您可以对同一字段应用多条注释 .

```prisma
model Post {
  /// @DtoCreateOptional
  /// @DtoUpdateHidden
  createdAt   DateTime @default(now())
  /// @DtoOverrideType(DurationLike, luxon)
  timeUntilExpires Json?
}
```

| 注释 | 说明 |
| --- | --- |
| `@DtoReadOnly` | 删除字段 `CreateDTO` 财务报告和审定财务报表 `UpdateDTO` |
| `@DtoCreateHidden` | 删除字段 `CreateDTO` |
| `@DtoUpdateHidden` | 删除字段 `UpdateDTO` |
| `@DtoEntityHidden` | 删除字段 `Entity` |
| `@DtoConnectHidden` | 删除字段 `ConnectDto` (适用于 `@id` 财务报告和审定财务报表 `@unique` 字段) |
| `@DtoApiHidden` | 添加 `@ApiHideProperty` 在文档中隐藏字段的装饰器, 类校验未受影响 |
| `@DtoCreateOptional` | 添加字段 **可选择** 改为 `CreateDTO` - 用于本可省略的字段(例如:. `@id`, (中文(简体) ), `@updatedAt`(中文(简体) ) |
| `@DtoCreateRequired` | 标记字段 **所需经费** 内 `CreateDTO` 否则是可选的——也添加了否则会被省略的字段(例如:. `@id`, (中文(简体) ), `@updatedAt`(中文(简体) ) |
| `@DtoUpdateOptional` | 添加字段 **可选择** 改为 `UpdateDTO` - 用于本可省略的字段(例如:. `@id`, (中文(简体) ), `@updatedAt`(中文(简体) ) |
| `@DtoUpdateRequired` | 标记字段 **所需经费** 内 `UpdateDTO` 否则是可选的——也添加了否则会被省略的字段(例如:. `@id`, (中文(简体) ), `@updatedAt`(中文(简体) ) |
| `@DtoRelationRequired` | 标记关系 **所需经费** 内 `Entity` 尽管在PrismaSchema中它是可选的 - 在您不想要时有用( SQL) `ON DELETE CASCADE` 行为 - 但您的逻辑数据计划视此关系为必要( )**说明**: 一次过时 [优惠行动](https://github.com/prisma/prisma/issues/7816) 释放和稳定) |
| `@DtoRelationCanCreateOnCreate` | 添加 [创建](https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#create-a-related-record) 选项 `CreateDTO` - 允许创建相关模式实例时有用 |
| `@DtoRelationCanConnectOnCreate` | 添加 [连接](https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#connect-multiple-records) 选项 `CreateDTO` - 当您想要/需要连接到已有相关实例时有用 |
| `@DtoRelationCanCreateOnUpdate` | 添加 [创建](https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#create-a-related-record) 选项 `UpdateDTO` - 允许创建相关模式实例时有用 |
| `@DtoRelationCanConnectOnUpdate` | 添加 [连接](https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#connect-multiple-records) 选项 `UpdateDTO` - 当您想要/需要连接到已有相关实例时有用 |
| `@DtoRelationCanUpdateOnUpdate` | 添加 [更新](https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries#add-new-related-records-to-an-existing-record) 选项 `UpdateDTO` - 当您想要/需要更新现有相关实例时有用, 仅适用于“ 一对一” 关系 |
| `@DtoRelationCanDisconnectOnUpdate` | 添加 [断开](https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#disconnect-a-related-record) 选项 `UpdateDTO` - 当您想要/需要断开已有相关实例时有用 |
| `@DtoRelationIncludeId` | 包含因其他原因被省略的关系字段的ID(使用代替 `CanCreate`编号 :`CanConnect` 说明,如果你只是想通过 IDs) |
| `@DtoTypeFullUpdate` | 在生成时 `UpdateDTO`,使用 `CreateDTO` 组合类型,以强制完全替换旧值(见 [2号](https://github.com/Brakebein/prisma-generator-nestjs-dto/issues/2#issuecomment-1238855460)(中文(简体) ) |
| `@DtoOverrideType(...)` | 在所有生成的实体中,强制为这个领域提供某种类型。 如果需要将Json 字段投放到读取/写入时特别有用 。 注意,您必须提供至少一个参数,并且可以在 `(...)` 使用此注释 - 第一种是用于此字段的要强制的类型名称, 第二和第三可以用于添加一个 `import` 用于实体文件顶端的该类型。 例如:
-   `@DtoOverrideType(MyType)` 将球场投出 `MyType` 但是不添加导入
-   `@DtoOverrideType(MyType, some-package)` 将球场投出 `MyType` 添加 `import {MyType} from "some-package"`
-   `@DtoOverrideType(MyType, ../types, default)` 将投出并添加 `import MyType from "../types"`
-   `@DtoOverrideType(MyTypeInterface, ../types, MyType)` 将变成 `MyTypeInterface` 添加 `import {MyType as MyTypeInterface} from "../types"`

 |
| `@DtoOverrideApiPropertyType(...)` | 与 `@DtoOverrideType` 不过 `@ApiProperty()` `type` 属性 |
| `@DtoCreateValidateIf(...)` | 添加 `@ValidateIf(...)` 字段的装饰符 `CreateDTO` (计: [条件验证](https://github.com/typestack/class-validator#conditional-validation) (按等级验证) |
| `@DtoUpdateValidateIf(...)` | 添加 `@ValidateIf(...)` 字段的装饰符 `UpdateDTO` (计: [条件验证](https://github.com/typestack/class-validator#conditional-validation) (按等级验证) |

### Schema 对象说明

与 `@nestjs/swagger`,您可以从代码中生成 API 规格. 路由,请求机构,查询参数等都附有特制装饰. 属性可以附加注释 `@ApiProperty()` 添加 schema 对象信息的装饰符 . 运行时将部分添加,然后包括 `type`, (中文(简体) ), `nullable`等 (中文(简体) ). 但需要人工添加描述等补充信息.

如果使用这样的生成器, 任何自定义 `@ApiProperty()` 在更新DTO时,注释将被推翻. 添加前缀的 schema 属性 `@` 改为上页的评论部分.

目前,支持以下计划属性:

-   `description`
-   `minimum`
-   `maximum`
-   `exclusiveMinimum`
-   `exclusiveMaximum`
-   `minLength`
-   `maxLength`
-   `minItems`
-   `maxItems`
-   `example`

此外,还推断和说明特殊数据类型:

-   `Int: { type: 'integer', format: 'int32' }`
-   `BigInt: { type: 'integer', format: 'int64' }`
-   `Float: { type: 'number', format: 'float' }`
-   `Decimal: { type: 'number', format: 'double' }`
-   `DateTime: { type: 'string', format: 'date-time' }`

#### 示例

使用 `@description` 财务报告和审定财务报表 `@minimum` 标记

```prisma
/// @description Number of reviews
/// @minimum 9
reviewCount Int     @default(0)
```

将生成 `@ApiProperty()` 装饰器 `description` 财务报告和审定财务报表 `minimum` 财产,以及 `type` 财务报告和审定财务报表 `format` 以指定数据类型.

```typescript
@ApiProperty({
  description: 'Number of reviews',
  minimum: 9,
  type: 'integer',
  format: 'int32',
})
reviewCount: number;
```

默认值在 `CreateDTO` 财务报告和审定财务报表 `UpdateDTO`。 。 。 . 然而,一个领域有一个 `@default()` 属性默认隐藏于 `CreateDTO` 财务报告和审定财务报表 `UpdateDTO`, (中文(简体) ), 因此,需要 `@DtoCreateOptional` 和(或) `@DtoUpdateOptional` 将在场.

### 校验装饰

若为 `classValidation = "true"`,生成器将会从 [类验证器](https://github.com/typestack/class-validator) 改为每个字段 `CreateDTO` 财务报告和审定财务报表 `UpdateDTO` 然后可以与雀巢JS结合使用 `ValidationPipe` (见 [NestJS 自动验证](https://docs.nestjs.com/techniques/validation#auto-validation)) (中文(简体) ).

一些装饰会从字段的属性推断出来. 如果字段是可选的,将添加 `@IsOptional()`,否则 `@IsNotEmpty()`。 。 。 . 如果字段是一个列表, 它会添加 `@IsArray()`。 。 。 . 从字段类型推断出类型验证符 :

-   `String` → `@IsString()`
-   `Boolean` → `@IsBoolean()`
-   `Int` → `@IsInt()`
-   `BigInt` → `@IsInt()`
-   `Float:` → `@IsNumber()`
-   `Decimal:` → `@IsDecimal()`
-   `DateTime` → `@IsDateString()`

其余 [校验装饰](https://github.com/typestack/class-validator#validation-decorators) 可在字段上方的评论/文档部分中添加. 如果不传递一个值,则可以省略括号.

#### 示例

普里斯马斯克马

```prisma
/// @Contains('Product')
name        String   @db.VarChar(255)
reviewCount Int      @default(0)
/// @ArrayNotEmpty
tags        String[]
score       Float?
```

生成输出

```typescript
@IsNotEmpty()
@IsString()
@Contains('Product')
name: string;
@IsOptional()
@IsInt()
reviewCount?: number;
@IsNotEmpty()
@IsArray()
@ArrayNotEmpty()
tags: string[];
@IsOptional()
@IsNumber()
score?: number;
```

## 示例

普里斯马斯克马

```prisma
generator nestjsDto {
  provider = "prisma-generator-nestjs-dto"
  output = "../src"
  outputToNestJsResourceStructure = "true"
}

model Question {
  id          String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
  /// @DtoReadOnly
  createdAt   DateTime @default(now())
  /// @DtoRelationRequired
  createdBy   User? @relation("CreatedQuestions", fields: [createdById], references: [id])
  createdById String? @db.Uuid
  updatedAt   DateTime @updatedAt
  /// @DtoRelationRequired
  updatedBy   User? @relation("UpdatedQuestions", fields: [updatedById], references: [id])
  updatedById String? @db.Uuid

  /// @DtoRelationRequired
  /// @DtoRelationCanConnectOnCreate
  category   Category? @relation(fields: [categoryId], references: [id])
  categoryId String?   @db.Uuid

  /// @DtoCreateOptional
  /// @DtoRelationCanCreateOnCreate
  /// @DtoRelationCanConnectOnCreate
  /// @DtoRelationCanCreateOnUpdate
  /// @DtoRelationCanConnectOnUpdate
  tags Tag[]

  title     String
  content   String
  responses Response[]
}
```
生成结果

```ts
// src/question/dto/connect-question.dto.ts
export class ConnectQuestionDto {
  id: string;
}
```

```ts
// src/question/dto/create-question.dto.ts
import { ApiExtraModels } from '@nestjs/swagger';
import { ConnectCategoryDto } from '../../category/dto/connect-category.dto';
import { CreateTagDto } from '../../tag/dto/create-tag.dto';
import { ConnectTagDto } from '../../tag/dto/connect-tag.dto';

export class CreateQuestionCategoryRelationInputDto {
  connect: ConnectCategoryDto;
}
export class CreateQuestionTagsRelationInputDto {
  create?: CreateTagDto[];
  connect?: ConnectTagDto[];
}

@ApiExtraModels(
  ConnectCategoryDto,
  CreateQuestionCategoryRelationInputDto,
  CreateTagDto,
  ConnectTagDto,
  CreateQuestionTagsRelationInputDto,
)
export class CreateQuestionDto {
  category: CreateQuestionCategoryRelationInputDto;
  tags?: CreateQuestionTagsRelationInputDto;
  title: string;
  content: string;
}
```

```ts
// src/question/dto/update-question.dto.ts
import { ApiExtraModels } from '@nestjs/swagger';
import { CreateTagDto } from '../../tag/dto/create-tag.dto';
import { ConnectTagDto } from '../../tag/dto/connect-tag.dto';

export class UpdateQuestionTagsRelationInputDto {
  create?: CreateTagDto[];
  connect?: ConnectTagDto[];
}

@ApiExtraModels(CreateTagDto, ConnectTagDto, UpdateQuestionTagsRelationInputDto)
export class UpdateQuestionDto {
  tags?: UpdateQuestionTagsRelationInputDto;
  title?: string;
  content?: string;
}
```

```ts
// src/question/entities/question.entity.ts
import { User } from '../../user/entities/user.entity';
import { Category } from '../../category/entities/category.entity';
import { Tag } from '../../tag/entities/tag.entity';
import { Response } from '../../response/entities/response.entity';

export class Question {
  id: string;
  createdAt: Date;
  createdBy?: User;
  createdById: string;
  updatedAt: Date;
  updatedBy?: User;
  updatedById: string;
  category?: Category;
  categoryId: string;
  tags?: Tag[];
  title: string;
  content: string;
  responses?: Response[];
}
```

## 原则

通常我们从 `DMMF.Field` 提供的资料 `@prisma/generator-helper`由于有些情况并不十分清楚,我们还要检查是否有其他 [说明](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-annotations) (或 `decorators`在田间 `documentation` (这是任何作为 [三相斜线评论](https://www.prisma.io/docs/concepts/components/prisma-schema#comments) 在你的田间 `prisma.schema`) (中文(简体) ).

起初,我们想要 `DTO` 类改为 `implement Prisma.<ModelName><(Create|Update)>Input` 但结果却与 **所需经费** 关系字段.

### 连接DTO

这种DTO代表了在试图从外部(如REST API消费者)期望得到的输入数据的结构 `connect` 通过关系字段到模型.

A 类 `Model`编号 `ConnectDTO` 类由独一无二的列表组成 `isId` 财务报告和审定财务报表 `isUnique` 斯伽罗地. 如果 `ConnectDTO` 类别有完全一个财产,财产按要求标出。 如果有多个属性,所有属性都是可选的(因为设置其中的一个属性已经足以进行独特的查询) - 但是,您必须指定至少一个属性 .

`ConnectDTO`s 用于关系字段 `CreateDTO`s 和 `UpdateDTO`编号.

### 创建 DTO

这种DTO代表了在试图从外部(如REST API消费者)期望得到的输入数据的结构 `create` 新实例 `Model`。 。 。 . 通常,对数据库计划的要求与我们希望允许用户做的事情不同. 举例来说(这就是这个生成器所表达的观点),我们认为关系平面字段不应该被用户曝光,因为 `create`, (中文(简体) ), `update`,或 `delete` 活动(在PrismaClient中生成的TypeScript类型也排除这些字段)。 但是,如果您的计划定义了必要的关系,如果没有关系数据,创建该模型的实体将变得相当困难. 在某些情况下,您可以从上下文中获取相关实例的信息(例如,剩余端点上的HTTP路径) `/api/post/:postid/comment` 创建 `Comment` (a) 关于 `Post`) (中文(简体) ). 对于其他案件,我们掌握了

-   `@DtoRelationCanCreateOnCreate`
-   `@DtoRelationCanConnectOnCreate`
-   `@DtoRelationCanCreateOnUpdate`
-   `@DtoRelationCanConnectOnUpdate`

[说明](https://npmcn.com/package/%40brakebein/prisma-generator-nestjs-dto/#readme-annotations) 生成相应的输入属性 `CreateDTO` 财务报告和审定财务报表 `UpdateDTO` (可选择的或需要的----取决于关系的性质).

当生成一个 `Model`编号 `CreateDTO` class, 符合下列任何条件的字段被省略(**命令事项**:

-   `isReadOnly` OR 附加说明 `@DtoReadOnly` (单位:千美元)_说明:_ 这显然包括关系平板字段)
-   字段代表关系( y)`field.kind === 'object'`,不附加注释 `@DtoRelationCanCreateOnCreate` 或者说 `@DtoRelationCanConnectOnCreate`
-   字段为 a [关系平面](https://www.prisma.io/docs/concepts/components/prisma-schema/relations/#annotated-relation-fields-and-relation-scalar-fields)
-   字段没有附加注释 `@DtoCreateOptional` 和
    -   `isId && hasDefaultValue` (id字段不应由用户提供)
    -   `isUpdatedAt` (单位:千美元)[普里斯马](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#updatedat) 将输入值)
    -   `isRequired && hasDefaultValue` (对于空出时会回落到默认值的计程字段). 以为: `createdAt` 时间戳 `@default(now())` (见 [现在( )](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#now)页:1

### 更新DTO

当生成一个 `Model`编号 `UpdateDTO` class, 符合下列任何条件的字段被省略(**命令事项**:

-   字段附加注释 `@DtoUpdateOptional`
-   `isReadOnly` OR 附加说明 `@DtoReadOnly` (单位:千美元)_说明:_ 这显然包括关系平板字段)
-   `isId` (id字段不应由用户更新)
-   字段代表关系( y)`field.kind === 'object'`,不附加注释 `@DtoRelationCanCreateOnUpdate` 或者说 `@DtoRelationCanConnectOnUpdate`
-   字段为 a [关系平面](https://www.prisma.io/docs/concepts/components/prisma-schema/relations/#annotated-relation-fields-and-relation-scalar-fields)
-   字段没有附加注释 `@DtoUpdateOptional` 和
    -   `isId` (id字段不应由用户更新)
    -   `isUpdatedAt` (单位:千美元)[普里斯马](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#updatedat) 将输入值)
    -   `isRequired && hasDefaultValue` (对于空出时会回落到默认值的计程字段). 以为: `createdAt` 时间戳 `@default(now())` (见 [现在( )](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#now)页:1

### 实体

当生成一个 `Model`编号 `Entity` 类别,仅附加注释的字段 `@DtoEntityHidden` 被删除. 其他所有领域都只被操控 `isRequired` 财务报告和审定财务报表 `isNullable` 旗帜.

默认情况下,一个实体的每个平面字段都是 `required` 意思是它没有获得 TypeScript “ 可选成员旗帜 ” `?` 旁边是名字 PrismaSchema 中标为可选字段的字段被视为 `nullable` - 意思是他们的TypeScript类型是: `field.type` 财务报告和审定财务报表 `null` (例如:. `string | null`) (中文(简体) ).

关系和 [关系平面](https://www.prisma.io/docs/concepts/components/prisma-schema/relations/#annotated-relation-fields-and-relation-scalar-fields) 字段受到不同的对待。 如果你不具体的话 `include` a 在您的查询中,这些字段将不存在.

-   每个关系字段总是可选的(`isRequired = false`(中文(简体) )
-   关系无效,除非
    -   关系字段为一对多或多对多(即列表)类型(如果找不到相關相關紀錄会返回空陣列)
    -   该关系最初按要求标出(`isRequired = true`(中文(简体) )
    -   关系字段 `@DtoRelationRequired` (当你在 PrismaSchema 中将一个关系标为可选关系时这样做,因为你不希望(SQL)) `ON DELETE CASCADE` 行为 - 但你的逻辑数据方案视此关系为必要)
-   默认值不添加到 `@ApiProperty()` 装饰

### 数字

平原上 `DTO` 类几乎与 `Entity` ,区别是所有关系字段被省略. 如果您的回应是没有任何(可选的)关系的平庸实体,则此反应是有用的 .

## 许可证

所有文件均在 [Apache 许可证 2.0](https://github.com/Brakebein/prisma-generator-nestjs-dto/blob/master/LICENSE)。 。 。 .

## 常见问题

### @brakebein/prisma-generator-nestjs-dto 是什么？

从 Prisma Schema 为 NestJS 生成 DTO 和实体类

### 如何安装 @brakebein/prisma-generator-nestjs-dto？

在项目目录运行 npm install @brakebein/prisma-generator-nestjs-dto，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@prisma/client（^5\.16\.0 \|\| ^6\.0\.0 \|\| ^7\.0\.0）、prisma（^5\.16\.0 \|\| ^6\.0\.0 \|\| ^7\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 prisma-generator-nestjs-dto，可以用 npx prisma-generator-nestjs-dto 直接运行。

### @brakebein/prisma-generator-nestjs-dto 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @brakebein/prisma-generator-nestjs-dto 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @brakebein/prisma-generator-nestjs-dto 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=14。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @brakebein/prisma-generator-nestjs-dto 可以商用吗？

@brakebein/prisma-generator-nestjs-dto 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @brakebein/prisma-generator-nestjs-dto 的下载量有多少？

根据 npm 官方下载统计，@brakebein/prisma-generator-nestjs-dto 在 2026/10/09 – 2026/11/07 这 30 天内被下载 37,737 次，日均约 1,258 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @brakebein/prisma-generator-nestjs-dto 还在维护吗？

最新版本 1\.30\.0 发布于 2026/06/18（4 个月前）；至今共发布 71 个版本，其中过去 12 个月发布了 3 个；首次发布于 2022/03/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

