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.