字段和类型
本节涵盖你可以与 Prisma 客户端一起使用的各种特殊字段和类型。
¥This section covers various special fields and types you can use with Prisma Client.
与 Decimal 合作
¥Working with Decimal
Decimal 字段由 Decimal.js library 表示。以下示例演示了如何导入和使用 Prisma.Decimal:
¥Decimal fields are represented by the Decimal.js library. The following example demonstrates how to import and use Prisma.Decimal:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
cost: new Prisma.Decimal(24.454545),
},
})
你还可以执行算术运算:
¥You can also perform arithmetic operations:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
cost: new Prisma.Decimal(24.454545).plus(1),
},
})
Prisma.Decimal 使用 Decimal.js,请参阅 Decimal.js 文档 了解更多信息。
¥Prisma.Decimal uses Decimal.js, see Decimal.js docs to learn more.
使用 Decimal 字段 MongoDB 目前不支持。
¥The use of the Decimal field is not currently supported in MongoDB.
与 BigInt 合作
¥Working with BigInt
概述
¥Overview
BigInt 字段由 BigInt 型 表示(需要 Node.js 10.4.0+)。以下示例演示了如何使用 BigInt 类型:
¥BigInt fields are represented by the BigInt type (Node.js 10.4.0+ required). The following example demonstrates how to use the BigInt type:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
revenue: BigInt(534543543534),
},
})
序列化 BigInt
¥Serializing BigInt
Prisma 客户端以纯 JavaScript 对象的形式返回记录。如果你尝试在包含 BigInt 字段的对象上使用 JSON.stringify,你将看到以下错误:
¥Prisma Client returns records as plain JavaScript objects. If you attempt to use JSON.stringify on an object that includes a BigInt field, you will see the following error:
Do not know how to serialize a BigInt
要解决此问题,请使用 JSON.stringify 的自定义实现:
¥To work around this issue, use a customized implementation of JSON.stringify:
JSON.stringify(
this,
(key, value) => (typeof value === 'bigint' ? value.toString() : value) // return everything else unchanged
)
与 Bytes 合作
¥Working with Bytes
Bytes 字段由 Uint8Array 类型表示。以下示例演示了如何使用 Uint8Array 类型:
¥Bytes fields are represented by the Uint8Array type. The following example demonstrates how to use the Uint8Array type:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
myField: new Uint8Array([1, 2, 3, 4]),
},
})
请注意,在 Prisma v6 之前,Bytes 由 Buffer 类型表示:
¥Note that before Prisma v6, Bytes were represented by the Buffer type:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
myField: Buffer.from([1, 2, 3, 4]),
},
})
在 升级到 v6 的指南 中了解更多信息。
¥Learn more in the upgrade guide to v6.
与 DateTime 合作
¥Working with DateTime
目前有一个 bug,它不允许你将 DateTime 值作为字符串传递,并且在你这样做时会产生运行时错误。DateTime 值需要作为 Date 对象传递(即 new Date('2024-12-04') 而不是 '2024-12-04')。
¥There currently is a bug that doesn't allow you to pass in DateTime values as strings and produces a runtime error when you do. DateTime values need to be passed as Date objects (i.e. new Date('2024-12-04') instead of '2024-12-04').
在创建具有 DateTime 类型字段的记录时,Prisma Client 会接受符合 ISO 8601 标准的 Date 对象作为值。
¥When creating records that have fields of type DateTime, Prisma Client accepts values as Date objects adhering to the ISO 8601 standard.
考虑以下模式:
¥Consider the following schema:
model User {
id Int @id @default(autoincrement())
birthDate DateTime?
}
以下是创建新记录的一些示例:
¥Here are some examples for creating new records:
1998 年 1 月 1 日;00 小时 00 分钟 000 毫秒
¥Jan 01, 1998; 00 h 00 min and 000 ms
await prisma.user.create({
data: {
birthDate: new Date('1998')
}
})
1998 年 12 月 1 日;00 小时 00 分钟 000 毫秒
¥Dec 01, 1998; 00 h 00 min and 000 ms
await prisma.user.create({
data: {
birthDate: new Date('1998-12')
}
})
1998 年 12 月 24 日;00 小时 00 分钟 000 毫秒
¥Dec 24, 1998; 00 h 00 min and 000 ms
await prisma.user.create({
data: {
birthDate: new Date('1998-12-24')
}
})
1998 年 12 月 24 日;06 小时 22 分 33 秒 444 毫秒
¥Dec 24, 1998; 06 h 22 min 33s and 444 ms
await prisma.user.create({
data: {
birthDate: new Date('1998-12-24T06:22:33.444Z')
}
})
与 Json 合作
¥Working with Json
¥See: Working with Json fields
使用标量列表/标量数组
¥Working with scalar lists / scalar arrays
¥See: Working with scalar lists / arrays
使用复合 ID 和复合唯一约束
¥Working with composite IDs and compound unique constraints
¥See: Working with composite IDs and compound unique constraints