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;
