gpt4 book ai didi

javascript - 如何从 TypeORM 属性装饰器中获取值

转载 作者:行者123 更新时间:2023-12-01 16:16:18 25 4
gpt4 key购买 nike

import { PrimaryColumn, Column } from 'typeorm';

export class LocationStatus {
@PrimaryColumn({ name: 'location_id' })
locationId: string;

@Column({ name: 'area_code', type: 'int' })
areaCode: number;
}

我花了几个小时试图弄清楚如何从属性装饰器 @Column()< 中检索名称属性值 location_idarea_code/,但没有运气。我不确定是否有可能获得属性列表。

最佳答案

typeorm 源代码来看(此处:1 , 2 , 3 , 4 )你可以通过全局变量 typeormMetadataArgsStorage< 访问各种东西(如 window.typeormMetadataArgsStorageglobal.typeormMetadataArgsStorage)。探索它,我相信你会找到你正在寻找的东西:

const global_context = ??? // depends on your environment
const property_to_look_for = `areaCode`
const name = global_context.typeormMetadataArgsStorage
.columns
.filter(col => col.propertyName === property_to_look_for && col.target === LocationStatus)
.options
.name
console.log(name)

已更新

对于那些像我一样目前正在使用 Nest 的人,这是我到目前为止所做的。


import { getMetadataArgsStorage, InsertResult } from 'typeorm';

export class PinLocationStatusRepository extends Repository<PinLocationStatus> {
// Column names in this array, the value should not be modified.
// For instance, the location_id value "location_ko_01" won't be changed.
private static immutableColumnNames = ['location_id', ...];

private static mutableColumnFound(name: string): boolean {
return PinLocationStatusRepository.immutableColumnNames.every(colName => colName !== name);
}

savePinLocation(state: PinLocationStatus): Promise<InsertResult> {
const columns = getMetadataArgsStorage()
.columns.filter(({ target }) => target === PinLocationStatus)
.map(({ options, propertyName }) => (!options.name ? propertyName : options.name))
.reduce((columns, name) => {
if (PinLocationStatusRepository.mutableColumnFound(name)) {
columns.push(name);
}
return columns;
}, []);

return this.createQueryBuilder()
.insert()
.into(PinLocationStatus)
.values(state)
.orUpdate({ overwrite: columns }) // ['area_code']
.execute();
}
}
  1. @Column() 装饰器中提取列名。
  2. 过滤掉一些值必须保持不变的列名。
  3. 将列变量传递给 overwrite 属性。

除非 area_code 是不可变的列,否则您将得到正确的结果。

关于javascript - 如何从 TypeORM 属性装饰器中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63788437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com