Nestjs 类型化关系-按id保存

Nestjs 类型化关系-按id保存,nestjs,typeorm,Nestjs,Typeorm,我对这些关系有点困惑,因为我习惯于按id保存关系,而我找到的文档和示例建议获取整个对象并使用它(这难道不奇怪吗?) 我在github上发现了这个问题(),他们建议只使用id属性的对象,但这是2017年发布的。这是一个好方法吗?这仍然是唯一的方法吗?(我觉得这很蹩脚) 异步创建(@Body()product:product){ product.category={id:product.category}; 返回{有效载荷:等待this.repository.persist(product)}; }

我对这些关系有点困惑,因为我习惯于按id保存关系,而我找到的文档和示例建议获取整个对象并使用它(这难道不奇怪吗?)

我在github上发现了这个问题(),他们建议只使用id属性的对象,但这是2017年发布的。这是一个好方法吗?这仍然是唯一的方法吗?(我觉得这很蹩脚)

异步创建(@Body()product:product){ product.category={id:product.category}; 返回{有效载荷:等待this.repository.persist(product)}; } 另一个建议将列命名为categoryId,它将按预期工作(使用id而不是object),但为什么呢?这个名字和这个有什么关系

@Entity()
类产品{
@列({type:“int”,null:true})
类别ID:编号;
@多通(类型=>类别)
@JoinColumn({name:“categoryId”})
类别:类别;
}
我只是糊涂了,救命^_^

这不是很奇怪吗

这取决于你怎么想,但是是的,我也喜欢只设置id,而不获取整个相关实体

这是一个好方法吗?这仍然是唯一的方法吗

我也在弄清楚字体的过程中。我发现你可以做到:

product.category = <any>3;
// or
product['category' as any] = 3;
repository.save(product) // I don't know how you have the persist() method.
product.category=3;
//或
产品[‘类别’如有]=3;
repository.save(product)//我不知道如何使用persist()方法。
在您的情况下,product.categoryId列将设置为3。如果categoryId是一个外键,并且您设置了一个不存在的id,您将得到一个外键错误,就像您应该得到的一样

但是这样ts仍然会认为
product.category
属于
category
类型。您还可以将
类别
属性指定为
类别|编号
。但是你必须到处进行类型检查,这很烦人。我已经对此进行了一些测试,但我不确定这是否会导致一些毫无疑问的bug

这个名字和这个有什么关系


您提供的选项是定义两个属性:
category
是一个关系,而
categoryId
是一个列。属性
categoryId
的命名应与表中的列类似,但您也可以在
@列中传递
名称:“实际名称”
。我不知道如果您将
columnId
属性设置为不同的ID,会发生什么情况。

您所说的“您可以只做product.category=3”是什么意思?我得到了一个类型错误,你的意思是,即使它给出了一个类型错误,它也能工作吗?你是对的。我在node REPL中测试我的代码,它工作了,因为它只是js。我将编辑我的答案。