javascript - TypeORM - lägg till objekt i OneToMany-relationer
Jag har en user och project entitet med OneToMany relationer mellan dem,
user.entity.ts
@ManyToOne(() => Project, pro => pro.members, {
nullable: true
})
@JoinColumn({
name: 'userId',
})
member: Project;
projekt.enhet.ts
@OneToMany(() => User, user => user.member)
members: User[]
funktion för att lägga till användare i projekt:
async addMemberToProject(projectId: number, memberEmail: string): Promise<void> {
const project = await this.conn.getRepository(Project).findOne({
where: {
id: projectId
}
}).catch(() => {
throw new BadRequestException("Project not found!");
});
const user = await this.getUserByEmail(memberEmail).catch(() => {
throw new BadRequestException("User not found!");
})
if(user !== null) {
project.members.push(user);
await this.conn.getRepository(Repository).save(project).catch(() => {
throw new BadRequestException("Member not added to project!");
});
}
}
varför när jag försöker lägga till användare till projektet, min kompilator kastar åt mig:
Cannot read property 'push' of undefined
Vad gör jag fel? Kanske har jag en dålig databasalogik? (Användare kan vara i många projekt, projekt kan ha många användare), Kan någon hjälpa mig? Tack för all hjälp!
Svar #1
@JoinColumn på user.entity ser fel ut, det borde heta: projectId, förutsatt att primärnyckeln på Project.entity är projectId.
Anledningen till ditt fel är att du behöver lägga till relations: ['members'] till projekt findOne()
const project = await this.conn.getRepository(Project).findOne({
where: {
id: projectId
},
relations: ['members']
})
Utan detta fyller inte TypeORM i "project.members": project.members är odefinierad, så project.members.push(user) orsakar ett "undefined"-fel.
