如何在 mikro-orm 中正确指定/使用 postgres 文本类型?
How to properly specify / work with postgres text type in mikro-orm?
我有一个存储序列化 json 字符串的实体。我最初将它声明为 string
类型,但当它超过 255 个字符时开始出现错误。 Postgres 说它应该声明为 text
类型,所以我引用了 MIKRO-ORM docs 并看到它们有一个 text: TextType
自定义类型。
我更新了我的实体,并手动更改了我的数据库类型,因为迁移没有接受更改,但是 Typescript 不喜欢新的更改,因为它试图将序列化的 json 字符串存储到文本类型产生 Argument of type 'string' is not assignable to parameter of type 'TextType'
错误。
我在截止日期前,所以我只是在上面放了一个 ts-ignore
声明,但我想弄清楚我做错了什么。我不清楚文档,谷歌搜索没有产生任何好处。
也许有人对此有所了解?
import { TextType } from '@mikro-orm/core';
@Entity()
export class Event {
...
@Property({ nullable: true })
meta: TextType;
...
constructor(
...
meta?: TextType,
) {
...
this.meta = meta || null;
}
}
提前致谢!
所以仔细查看文档让我看到了我所缺少的东西。
import { Property, types } from '@mikro-orm/core';
@Property({ type: types.text, nullable: true })
meta?: string;
本来应该是一个字符串,但是在装饰器中,我需要传递types.text。
我猜这是截止日期的问题,你错过了一些显而易见的事情。
您混淆了两件事 - TS 属性 类型,这是您的运行时值将被映射到的类型 - 它仍然是 string
- 以及将使用的映射类型处理值并定义数据库列类型 - 即 TextType
.
您链接的文档页面描述了 t
变量,它是所有提供的映射类型的映射,它只是描述了您可以用作别名的内容。以下所有内容都应该相同(请注意,我还在 TS 级别上将 属性 设为可选,因为您希望将其标记为可为空)。
@Property({ type: TextType, nullable: true })
meta?: string;
@Property({ type: t.text, nullable: true })
meta?: string;
@Property({ type: 'text', nullable: true })
meta?: string;
我有一个存储序列化 json 字符串的实体。我最初将它声明为 string
类型,但当它超过 255 个字符时开始出现错误。 Postgres 说它应该声明为 text
类型,所以我引用了 MIKRO-ORM docs 并看到它们有一个 text: TextType
自定义类型。
我更新了我的实体,并手动更改了我的数据库类型,因为迁移没有接受更改,但是 Typescript 不喜欢新的更改,因为它试图将序列化的 json 字符串存储到文本类型产生 Argument of type 'string' is not assignable to parameter of type 'TextType'
错误。
我在截止日期前,所以我只是在上面放了一个 ts-ignore
声明,但我想弄清楚我做错了什么。我不清楚文档,谷歌搜索没有产生任何好处。
也许有人对此有所了解?
import { TextType } from '@mikro-orm/core';
@Entity()
export class Event {
...
@Property({ nullable: true })
meta: TextType;
...
constructor(
...
meta?: TextType,
) {
...
this.meta = meta || null;
}
}
提前致谢!
所以仔细查看文档让我看到了我所缺少的东西。
import { Property, types } from '@mikro-orm/core';
@Property({ type: types.text, nullable: true })
meta?: string;
本来应该是一个字符串,但是在装饰器中,我需要传递types.text。
我猜这是截止日期的问题,你错过了一些显而易见的事情。
您混淆了两件事 - TS 属性 类型,这是您的运行时值将被映射到的类型 - 它仍然是 string
- 以及将使用的映射类型处理值并定义数据库列类型 - 即 TextType
.
您链接的文档页面描述了 t
变量,它是所有提供的映射类型的映射,它只是描述了您可以用作别名的内容。以下所有内容都应该相同(请注意,我还在 TS 级别上将 属性 设为可选,因为您希望将其标记为可为空)。
@Property({ type: TextType, nullable: true })
meta?: string;
@Property({ type: t.text, nullable: true })
meta?: string;
@Property({ type: 'text', nullable: true })
meta?: string;