gpt4 book ai didi

javascript - 在 TypeORM 中,如何根据该实体的其他字段在实体上预先计算字段?

转载 作者:行者123 更新时间:2023-12-03 22:16:51 24 4
gpt4 key购买 nike

我想在我的用户实体上创建一个“评级”字段。
用户实体与评级实体有关系,在用户上有一个名为 ratingReceived 的字段,它是分配给该用户的所有评级的急切加载。

我希望用户上的“评级”字段是所有评级值的平均计算,这是评级实体上称为“评级值”的字段。

所以基本上我希望这个计算是每个用户“评级”字段的值:
ratingsReceived.reduce((acc, curr) => acc + curr.ratingValue, 0) / ratingsReceived.length
有问题的字段是用户的“ratingsReceived”:

  @OneToMany(
() => Rating,
rating => rating.ratingTo
)
ratingsReceived: Rating[];

和评级上的“ratingValue”:
  @Column('decimal')
@Min(0)
@Max(5)
ratingValue: number;

最佳答案

经过反复试验,设法为此创建了一个解决方法,如下所示:

// After load is called after the entity loads during find() and similar
// I placed this decorator on my User Entity
@AfterLoad()
calculateRating = async () => {
const result = await getRepository(Rating)
.createQueryBuilder('ratings')
.where('ratings."ratingToId" = :id', { id: this.id })
.getRawAndEntities();

const ratingsAboveZero = result?.entities?.filter(x => parseFloat(x.ratingValue));
const count = ratingsAboveZero.length;

if (count > 0) {
this.rating =
ratingsAboveZero.reduce((acc, curr) => {
return acc + parseFloat(curr.ratingValue);
}, 0) / count;

this.ratingCount = count;
} else {
this.rating = 0;
this.ratingCount = 0;
}
};

关于javascript - 在 TypeORM 中,如何根据该实体的其他字段在实体上预先计算字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60939232/

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