Javascript 如何从TypeForm属性装饰器获取值 从'typeorm'导入{PrimaryColumn,Column}; 导出类位置状态{ @PrimaryColumn({name:'location_id'}) locationId:string; @列({name:'area_code',类型:'int'}) 区号:号码; }
我花了几个小时试图找出如何从属性装饰器Javascript 如何从TypeForm属性装饰器获取值 从'typeorm'导入{PrimaryColumn,Column}; 导出类位置状态{ @PrimaryColumn({name:'location_id'}) locationId:string; @列({name:'area_code',类型:'int'}) 区号:号码; },javascript,typescript,typeorm,Javascript,Typescript,Typeorm,我花了几个小时试图找出如何从属性装饰器@Column()检索名称属性值location\u id和area\u code,但运气不好。我不确定是否有可能获得属性列表。从typeorm源代码(这里:,)判断,您可以通过全局变量typeormmetadaargsstorage(如window.typeormmetadaargsstorage或global.typeormmetadaargsstorage)访问各种内容。探索一下,我相信你会找到你想要的东西: const全局上下文=???//取决于你的
@Column()
检索名称属性值location\u id
和area\u code
,但运气不好。我不确定是否有可能获得属性列表。从typeorm
源代码(这里:,)判断,您可以通过全局变量typeormmetadaargsstorage
(如window.typeormmetadaargsstorage
或global.typeormmetadaargsstorage
)访问各种内容。探索一下,我相信你会找到你想要的东西:
const全局上下文=???//取决于你的环境
const property_to_look_for=`areaCode`
const name=global_context.typeormmetadaargsstorage
.栏目
.filter(col=>col.propertyName==property\u to\u look\u for&&col.target==LocationStatus)
.选项
名称
console.log(名称)
已更新
对于像我这样目前正在使用Nest
的人,以下是我迄今为止所做的工作
从'typeorm'导入{getMetadataArgsStorage,InsertResult};
导出类PinLocationStatusRepository扩展存储库{
//列名称,则不应修改该值。
//例如,location\u id值“location\u ko\u 01”不会更改。
私有静态immutableColumnNames=['location_id',…];
找到私有静态可变列(名称:字符串):布尔值{
返回PinLocationStatusRepository.immutableColumnNames.every(colName=>colName!==name);
}
savePinLocation(状态:PinLocationStatus):承诺{
const columns=getMetadataArgsStorage()
.columns.filter(({target})=>target===PinLocationStatus)
.map(({options,propertyName})=>(!options.name?propertyName:options.name))
.reduce((列,名称)=>{
if(PinLocationStatusRepository.mutableColumnFound(名称)){
columns.push(name);
}
返回列;
}, []);
返回此值。createQueryBuilder()
.插入()
.into(PinLocationStatus)
.价值观(状态)
.orUpdate({overwrite:columns})/['area_code']
.execute();
}
}
@column()
装饰器中提取列名overwrite
属性中除非
area\u code
是不可变的列,否则您将得到正确的结果。将是合适的。@AluanHaddad,谢谢。。。但到目前为止,它真的被普遍接受了吗?关于MDN的实施进度部分并不乐观。是的。我倾向于多填充,但这不是一个可以多填充的功能。谢谢你的友好回答。我想编辑您的答案,但队列当前已满。我刚刚在您的答案下面添加了代码段。再次,非常感谢!