网站搜索

typescript - TypeError: relatedEntities.forEach 不是 NestJS/TypeORM 中的一个函数


由于我使用谷歌翻译写作,句子可能会很生硬。

我写了以下代码来使用外键在表中存储数据:

    async createGroup(tokenDto: tokenDto, createGroupDto: createGroupDto): Promise<object>{
        const userID = (await this.authService.accessValidate(tokenDto)).userID;

        const thisUser = await this.authEntity.findOneBy({ userID });

        if (!thisUser) throw new UnauthorizedException();

        console.log(thisUser)

        const group = new groupEntity();
        
        group.groupName = createGroupDto.groupName;
        group.groupIs = createGroupDto.groupIs;
        group.groupOwner = thisUser;
        group.groupExtendsID = createGroupDto.groupExtendsID;
        group.groupSuperID = createGroupDto.groupSuperID;

        const newGroup = this.groupEntity.save(group);

        return newGroup;
    }
    export class tokenDto {
        accesstoken: string;
        refreshtoken: string;
    }
    export class createGroupDto {
        @ApiProperty({ example: "groupIs.c", description: "공용 그룹과 개인 그룹으로 분류됨" })
        groupIs: groupIs;

        @ApiProperty({ example: "name_of_group", description: "그룹 이름으로 사용할 문자열" })
        groupName: string;

        @ApiProperty({ example: 1, description: "상위 그룹의 아이디, 상위 그룹이 없을 경우 null"})
        groupSuperID: number | null;

        @ApiProperty({ example: 3, description: "하위 그룹의 아이디, 하위 그룹이 없을 경우 null"})
        groupExtendsID: number | null;
    }

这段代码会报以下错误并且无法运行:ERROR [ExceptionsHandler] relatedEntities.forEach is not a function

下面是两个实体之间有关系的代码。我从社区听说我需要将类型改为数组,所以我尝试更改了,但错误没有解决。我应该如何解决这个问题?

    import { groupEntity } from "src/people/entity/group.entity";
    import { Column, Entity, OneToMany, PrimaryGeneratedColumn} from "typeorm";

    @Entity()
    export class authEntity{
        @OneToMany(() => groupEntity, groupEntity => groupEntity.groupOwner)
        @PrimaryGeneratedColumn({
            type: "integer",
        })
        userID: number[];

        @Column({
            type: "varchar",
            unique: true,
            nullable: false,
        })
        userLogID: string;

        @Column({
            type: "varchar",
            nullable: false,
            default: "1234",
        })
        userPW: string;

        @Column({
            type: "varchar",
            nullable: false,
        })
        userName: string;

        @Column({
            type: "varchar",
            nullable: false,
        })
        userDepartment: string;
    }
    import { authEntity } from "src/auth/entity/auth.entity";
    import { Column, Entity, JoinColumn, JoinTable, ManyToMany, ManyToOne, OneToMany, OneToOne,        PrimaryColumn, PrimaryGeneratedColumn } from "typeorm";
    import { peopleEntity } from "./people.entity";

    export enum groupIs{
        c = 'common',
        p = 'personal'
    }

    @Entity()
    export class groupEntity {
        @OneToMany(() => groupEntity, groupEntity => groupEntity.groupSuperID)
        @ManyToOne(() => groupEntity, groupEntity => groupEntity.groupExtendsID)
        @ManyToMany(() => peopleEntity, peopleEntity => peopleEntity.peopleID)
        @PrimaryGeneratedColumn({
            type: 'integer'
        })
        groupID: number;

        @PrimaryColumn({
            type: 'varchar'
        })
        groupName: string;

        @ManyToOne(() => authEntity, groupOwner => groupOwner.userID, {
            cascade: ["update"],
        })
        @PrimaryColumn({
            type: 'integer'
        })
        @JoinColumn()
        groupOwner: authEntity;

        @Column({
            type: 'enum',
            nullable: false,
            default: groupIs.p,
            enum: groupIs,
        })
        groupIs: groupIs;

        @ManyToOne(() => groupEntity, groupEntity => groupEntity.groupID, { nullable: true })
        @Column({
            type: 'integer',
            nullable: true
        })
        groupSuperID: number;

        @OneToMany(() => groupEntity, groupEntity => groupEntity.groupID, { nullable: true })
        @Column({
            type: 'integer',
            nullable: true
        })
        groupExtendsID: number;
    }

我也尝试过使用 @JoinColumn() 装饰器,或者将 @OneToMany 列的类型从 number 改为 number[],但什么都没变。我想将这些值保存在表中。请帮我解决这个问题。

答案#1

我终于找到了!我通过将装饰器稍微分开一点,并且不创建用于连接的列来解决了这个问题。似乎你不能使用与另一个装饰器有关系的装饰器。

    @PrimaryGeneratedColumn({
        type: 'integer'
    })
    groupID: number;

    @OneToMany(() => groupEntity, groupEntity => groupEntity.groupSuperID)
    @Generated()
    groupSuper: groupEntity;

    @ManyToOne(() => groupEntity, groupEntity => groupEntity.groupExtendsID)
    @Generated()
    groupExtends: groupEntity;