【发布时间】:2020-05-03 09:58:50
【问题描述】:
我有两个实体 - 财产和所有者。一个属性可以有很多所有者,而所有者可以有很多属性。对于连接使用 property_owner 表。如何使用 NestJS/TypeORM 更新这种多对多关系?
@Entity('property')
export class Property extends EntityModel {
@Column({ length: 255, nullable: false })
name: string;
@ManyToMany(type => Owner, { cascade: true })
@JoinTable({
name: 'property_owner',
joinColumn: { name: 'propertyId', referencedColumnName: 'id'},
inverseJoinColumn: { name: 'ownerId', referencedColumnName: 'id'},
})
owners: Owner[];
}
@Entity('owner')
export class Owner extends EntityModel {
@Column({ length: 255, nullable: false })
name: string;
@ManyToMany(type => Property, { cascade: true })
@JoinTable({
name: 'property_owner',
joinColumn: { name: 'ownerId', referencedColumnName: 'id'},
inverseJoinColumn: { name: 'propertyId', referencedColumnName: 'id'},
})
properties: Property[];
}
在我的服务的保存和更新方法下方:
public create(req: Request): Promise<Dto> {
const dto: CreateDto = {
...req.body,
owners: this.formatJoinData(req.body.owners) //[1,2,3] => [{id:1},{id:2},{id:3}]
};
const entity = Object.assign(new Entity(), dto);
return this.repo.save(entity);
}
public update(req: Request): Promise<UpdateResult> {
const dto: EditDto = {
...req.body,
owners: this.formatJoinData(req.body.owners) //[1,2,3] => [{id:1},{id:2},{id:3}]
};
const id = req.params.id;
const entity = Object.assign(new Entity(), dto);
return this.repo.update(id, entity);
}
保存新属性工作正常,但是当我尝试更新属性时出现错误
[ExceptionsHandler] column "propertyId" of relation "property" does not exist
两种情况下的所有者数据都类似于 [{id:1},{id:2},{id:3}]。我认为保存/更新方法会导致问题。保存方法返回给我们带有 id 的实体,更新方法返回给我们不包含实体 id 的 UpdateResult。但也许我们可以在某个地方转换/另外定义这个值......
【问题讨论】:
标签: many-to-many nestjs typeorm