作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试保存多对多关系。每个实体本身都运行良好。
这是我正在使用的两个实体文件:
// 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);
查看this guide看起来我应该能够对我的关系调用 save()
。在我的例子中 user.locations.save(locations)
。
但是,返回一个错误:
Property 'save' does not exist on type 'Location[]'.
使用 this S.O thread我知道我需要遍历位置 ID 数组并创建我需要保存的实际对象:
[{ locationId: location, userId: user.id }]
我需要先保存用户,这样我才能得到一个 userId。
如何将我的关系保存到我的 location_users_user
表?感谢您的任何建议!
编辑
谢谢@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
方法,数据透视表将适当更新。
您还需要引入另一个模块(用户/位置等)。感谢游吧,你可以see how to implement that here.
最佳答案
您需要做的是获取位置数据并将其绑定(bind)到新用户
...
try {
const user = new User(); //user entity
user.uuid = uuidv4();
const locationsData: Location[] = await this.locationRepository.findByIds(locations); // array of location entity
await user.locations = locationsData;
await user.save();
}
关于NestJs/类型ORM : How to save Many to Many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65779400/
我是一名优秀的程序员,十分优秀!