【发布时间】:2020-12-22 22:35:14
【问题描述】:
我有 2 个实体用户和行程与急切加载具有多对多关系。 当我加载行程时,我不希望返回所有用户详细信息,就像我不想要密码或创建和更新日期等只是想要名称和 ID。
我该怎么做?
下面是我的两个实体。
旅行实体
@Entity()
export class Trip {
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsNotEmpty()
@Index({ unique: true })
name: string
@ManyToOne(type => User)
@JoinColumn()
owner: User
@Column()
@IsNotEmpty()
destination: string
@ManyToMany(type => User, {
eager: true
})
@JoinTable()
buddies: User[]
}
用户实体
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@IsNotEmpty()
@Index({ unique: true })
username: string
@Column()
@IsNotEmpty()
firstName: string
@Column({ default: null })
lastName: string
@Column({ unique: true, default: null })
@Length(10, 12)
phonenumber: string
@Column()
@Length(8, 16)
password: string
@Column()
@CreateDateColumn()
createdAt: Date;
@Column()
@UpdateDateColumn()
updatedAt: Date;
@BeforeUpdate()
@BeforeInsert()
hashPassword() {
if (this.password) {
this.password = bcrypt.hashSync(this.password, 8);
}
}
checkIfUnencryptedPasswordIsValid(unencryptedPassword: string) {
return bcrypt.compareSync(unencryptedPassword, this.password);
}
}
把它当作
public doGetTripById = async (req: Request, res: Response) => {
const tripId = req.params.tripId;
const tripRepository = getRepository(Trip);
let trip: Trip;
try {
trip = await tripRepository.findOneOrFail({ where: { id: tripId } });
res.status(200).json(trip)
} catch (error) {
return res.status(400).json({ message: "Oops! somethig went haywire, possibly trip doesn't exist" })
}
}
我能够通过以下更改获得所需的响应,但我对此不满意。
trip.buddies.forEach(buddy => {
buddy.password = undefined
buddy.updatedAt = undefined
buddy.createdAt = undefined
buddy.phonenumber = undefined
})
【问题讨论】:
标签: mysql node.js typeorm eager-loading