我正在尝试保存多对多关系。每个实体本身都运行良好。
这是我正在使用的两个实体文件:
// location.entity
@ManyToMany(type => User, user => user.locations, { eager: true, cascade: true })
@JoinTable()
users: User[];
// user.entity
@ManyToMany(type => Location, location => location.users, { eager: false })
locations: Location[];
这是用户存储库:
// user.repository
...
user.locations = locations; // [1,2,3]
user.uuid = uuidv4();
try {
await user.save();
for (const location of user.locations) {
locationsArray.push({ locationId: location, userId: user.id });
}
await user.locations.save(locationsArray);
看着本指南看起来我应该可以打电话save()
关于我的关系。就我而言user.locations.save(locations)
.
但是,这会返回一个错误:
类型“Location[]”上不存在属性“save”。
Using 这个 S.O 线程我知道我需要循环遍历位置 Id 数组并创建我需要保存的实际对象:
[{ locationId: location, userId: user.id }]
我需要保存用户first这样我就可以得到一个userId。
我怎样才能挽救我与我的关系location_users_user
桌子?感谢您的任何建议!
EDIT
谢谢@Youba!请参阅下面的解决方案以获取更多信息。
希望这会帮助别人......
// location.entity.ts
...
@ManyToMany(type => User, user => user.locations, { eager: false })
@JoinTable()
users: User[];
// user.entity.ts
...
@ManyToMany(type => Location, location => location.users, { eager: false, cascade: true })
locations: Location[];
cascade
默认为 false。启用此功能将允许您调用save
方法和数据透视表将适当更新。
您还需要引入另一个模块(用户/位置等)。感谢优霸,你可以请参阅此处如何实现。