gpt4 book ai didi

NestJs/类型ORM : How to save Many to Many

转载 作者:行者123 更新时间:2023-12-05 04:54:25 24 4
gpt4 key购买 nike

我正在尝试保存多对多关系。每个实体本身都运行良好。

这是我正在使用的两个实体文件:

// 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com