我有一个我无法控制的数据源,无法以非规范化格式更改它。我需要将这些数据解析为标准化的对象图。有趣的是,数据以归一化并连接在一起时的形状存储。
我想告诉TypeORM解析这些数据,就像在ORM建立查询时一样。
例如,考虑以下数据:
userId | userName | photoUrl | photoCaption
-------------------------------------------
1 | Lu | <url1> | photo 1
1 | Lu | <url2> | photo 2
2 | Pat | <url3> | photo 3
2 | Pat | <url4> | photo 4
我想得到一个形状如下的对象图:
[
{
userId: 1, userName: 'Lu',
photos: [
{ photoUrl: <url1>, photoCaption: 'photo 1' },
{ photoUrl: <url2>, photoCaption: 'photo 2' }
]
},
{
userId: 2, userName: 'Pat',
photos: [
{ photoUrl: <url3>, photoCaption: 'photo 3' },
{ photoUrl: <url4>, photoCaption: 'photo 4' }
]
}
]
如果我的数据被标准化,那将是微不足道的一对多:
id | userName
------------------
1 | Lu
2 | Pat
userId | photoUrl | photoCaption
-------------------------------------------
1 | <url1> | photo 1
1 | <url2> | photo 2
2 | <url3> | photo 3
2 | <url4> | photo 4
有趣的是,产生的查询大致是:
SELECT users.*, photos.*
FROM users
LEFT JOIN photos
ON users.id = photos.userId;
与我实际存储在表中的数据结构相同。
是否有一种方法可以让TypeORM将这些数据解析为父子结构,就像它本身已经生成了查询一样?
类似这样的东西:
@Entity()
class Photo extends BaseEntity {
@PrimaryColumn() photoId!: number;
@Column() photoUrl!: string;
@Column() photoCaption!: string;
}
@Entity()
class UserPhotos extends BaseEntity {
@PrimaryColumn() id!: number;
@Column() userName!: string;
@SomethingMagicalAndWonderful()
photos: Photo[]
}
或者也许使用OneToMany
但有一些棘手的配置表明它不是真正的联接?