ben*_*sky 22 javascript postgresql node.js typescript typeorm
我有一列kid_ages
是Integer[]
. 迁移时,我收到以下错误:
DataTypeNotSupportedError: Data type "Array" in "home.kid_ages" is not supported by "postgres" database.
我尝试将以下选项添加到我的专栏中:
type: 'array'
Run Code Online (Sandbox Code Playgroud)
和:
array: true,
default: [],
nullable: false,`
@Column({
array: true,
default: [],
nullable: false,
})
kid_ages: string;`
Run Code Online (Sandbox Code Playgroud)
tho*_*paw 51
文档说,它应该可以工作:
@Column("int", { array: true })
array: number[];
Run Code Online (Sandbox Code Playgroud)
在您的代码中,数组属性不是数组。你试过kid_ages: string[];
吗?
Hum*_*mad 13
我尝试了已经提到的所有解决方案,但没有一个有效。最终在 TypeORM 存储库中的 Github 问题中找到了解决方案。
我引用一下解决方案:
这是一个简单的修复,列的类型不应该是数组。改成这样,现在可以工作了:
Run Code Online (Sandbox Code Playgroud)@Column({array: true}) tags: string;
关于数组的更好的文档会很有用。
Dmi*_*nin 10
如上所述,您可以使用以下代码创建 Postgres 的数组列:
@Column("int", { array: true })
kid_ages: number[];
Run Code Online (Sandbox Code Playgroud)
如果您需要找到一些 5 岁的孩子,请使用以下命令:
kid = getRepository('kid')
.createQueryBuilder()
.where(':kid_age = ANY (kid.kid_ages)', { kid_age: 5 });
Run Code Online (Sandbox Code Playgroud)
小智 10
我的 Postgres 检查数组包含的解决方案如下:
我对该列的定义如下:
@Column("text", { array: true, default: "{}" })
tags: string[];
Run Code Online (Sandbox Code Playgroud)
this.getFindQueryBuilder().where("recipe.tags && ARRAY[:...tags]", {tags: tags})
Run Code Online (Sandbox Code Playgroud)
“getFindQueryBuilder”:是一个获取共享SelectQueryBuilder以节省代码的函数。
这里重要的部分是我在示例中显示的 where 子句。
对于希望在您的实体中处理数组或字符串的人,根据 @thopaw 的回答,您可以使用以下代码:
@Column("text", { array: true })
kid_ages: string[];
Run Code Online (Sandbox Code Playgroud)
这里需要注意的重要一点是,即使声明整数数组,默认值也应该定义为空对象。
@Column("int", { array: true, default: {} })
ages: Number[];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26338 次 |
最近记录: |