我正在@ViewEntity()MySQL 上使用 TypeORM 创建一个,其中直接选择 JSON 列。该视图是正确的,只是一个普通的 SQL 视图。
视图类的列定义如下所示:
@ViewColumn() document: Estimate;
其中Estimate是指定 JSON 数据形状的接口,尽管我Estimate | Object也尝试过。存储库检索到的实体的文档属性始终为 a string,显然 ORM 没有解析 JSON。JSON.parse()因此,在响应请求之前,我必须做一些烦人的事情并改变检索到的记录。
ViewColumnOptions只需要 的 属性,所以我不能像在常规 的 上那样name指定。TypeORM 视图中的 JSON 列是否已实现?我无法在文档或 github 问题上找到结果。{ type: 'json' }@Entity()@Column()
And*_*ger 12
文档中没有很好地介绍这一点。
事实证明,您可以@Column()在视图中使用装饰器,因此我对上述问题的解决方案是将视图的列定义指定为
@Column({ type: 'json' }) document: Estimate;
而不是作为
@ViewColumn() document: Estimate;在原来的问题中。
此外,对于以后可能偶然发现这一点的任何人来说,如果您想针对视图建立关系,则必须在视图中至少修饰一列,以便@PrimaryColumn()TypeORM 正确地制定 SQL。同样,文档中没有涵盖这一点;读完它们后,您可能会相信 only@ViewColumn()在 a 内有效,这是情有可原的@ViewEntity()。
您内部的关系@ViewEntity()需要看起来像这样的示例Customer关系:
@ManyToOne(() => Customer)
@JoinColumn({ name: 'customerId' })
customer: Customer;
@ViewColumn() customerId: string;
Run Code Online (Sandbox Code Playgroud)
在上面,我在视图中选择了 SQL别名,您可以看到我必须将其指定为相关实体的属性声明之后的customerId名称。@JoinColumn()@ViewColumn()
| 归档时间: |
|
| 查看次数: |
20830 次 |
| 最近记录: |