【发布时间】:2021-04-02 03:30:18
【问题描述】:
我正在尝试更新我的 Angular 前端中的实体,在我的情况下是用户 (Benutzer),但我收到错误 EntityColumnNotFound: No entity column "anträge" was found. in NestJS (类型ORM)。当我使用 updateBenutzer 服务/控制器时,错误来了。我的代码如下所示:
benutzer.entity.ts
@Entity()
export class Benutzer {
@PrimaryGeneratedColumn({ type: "int" })
BenutzerID: number;
@Column({ type: "varchar", length: 50})
Benutzername: string;
@Column({ type: "varchar", length: 50})
Passwort: string;
@Column({ default: false})
istAdmin: boolean;
@Column({ default: false})
istVorgesetzter: boolean;
@Column({ type: "int"})
Vorgesetzter: number;
@Column({ type: "varchar", length: 50})
Vorname: string;
@Column({ type: "varchar", length: 50})
Nachname: string;
@Column()
Geburtsdatum: Date;
@Column({ type: "varchar", length: 50})
Email: string;
@Column()
Eintrittsdatum: Date;
@ManyToOne(() => Arbeitstage, arbeitstage => arbeitstage.allebenutzer)
arbeitstage: Arbeitstage;
@ManyToOne(() => Bundesland, bundesland => bundesland.alleBenutzer)
bundesland: Bundesland;
@OneToMany(() => Urlaubsantrag, urlaubsantrag => urlaubsantrag.benutzer)
anträge: Urlaubsantrag[];
}
urlaubsantrag.entity.ts
@Entity()
export class Urlaubsantrag {
@PrimaryGeneratedColumn({ type: "int" })
AntragID: number;
@Column({ type: "varchar", length: 50 })
Urlaubsart: string;
@Column({ type: "varchar", length: 50})
Status: string;
@Column()
von: Date;
@Column()
bis: Date;
@Column({ type: "varchar", length: 50})
Grund: string;
@Column()
informiert: boolean;
@ManyToOne(() => Benutzer, benutzer => benutzer.anträge, { onDelete: 'CASCADE' })
benutzer: Benutzer;
}
benutzer.service.ts
@Injectable()
export class BenutzerService {
constructor(
@InjectRepository(Benutzer)
private benutzerRepository: Repository<Benutzer>,
) {}
getAllBenutzer(): Promise<Benutzer[]> {
return this.benutzerRepository.find({ relations: ['bundesland', 'arbeitstage', 'anträge']});
}
findBenutzerByID(id: number): Promise<Benutzer> {
return this.benutzerRepository.findOne(id, { relations: ['bundesland', 'arbeitstage', 'anträge']});
}
async findBenutzerByVorgesetzter(id: number): Promise<Benutzer[]> {
return this.benutzerRepository.find({ where: {Vorgesetzter: id}});
}
getAllVorgesetzten(istVorgesetzter: boolean): Promise<Benutzer[]>{
return this.benutzerRepository.find({ where: {istVorgesetzter: istVorgesetzter} });
}
async createBenutzer(benutzer: CreateBenutzer) {
const nutzer = this.benutzerRepository.create(benutzer);
await this.benutzerRepository.save(benutzer);
return nutzer;
}
async updateBenutzer(id: number, createBenutzerDTO: CreateBenutzer) {
return await this.benutzerRepository.update( id, createBenutzerDTO);
}
async deleteBenutzer(id: number): Promise<DeleteResult> {
return await this.benutzerRepository.findOne(id).then((value) => {
return this.benutzerRepository.delete(value);
});
}
}
benutzer.controller.ts
@Controller('benutzer')
export class BenutzerController {
constructor(private readonly benutzerService: BenutzerService) {}
@Post()
async createBenutzer(@Body() createBenutzer: CreateBenutzer): Promise<Benutzer> {
return this.benutzerService.createBenutzer(createBenutzer);
}
@Get()
async getBenutzer(): Promise<Benutzer[]> {
return this.benutzerService.getAllBenutzer();
}
@Get('/vorgesetzter')
async getAllVorgesetzten(@Query('istVorgesetzter', new ParseBoolPipe()) istVorgesetzter: boolean): Promise<Benutzer[]>{
return this.benutzerService.getAllVorgesetzten(istVorgesetzter);
}
@Get(':id')
async getBenutzerByID(@Param('id', new ParseIntPipe()) id): Promise<Benutzer> {
return this.benutzerService.findBenutzerByID(id);
}
@Get('/vorgesetzter/:id')
async getBenutzerByVorgesetzter(@Param('id', new ParseIntPipe()) id): Promise<Benutzer[]> {
return this.benutzerService.findBenutzerByVorgesetzter(id);
}
@Put(':id')
updateBenutzer(@Param('id') id: number, @Body() createBenutzerDTO: CreateBenutzer) {
return this.benutzerService.updateBenutzer(id, createBenutzerDTO);
}
@Delete(':id')
async remove(@Param('id', new ParseIntPipe()) id) {
return this.benutzerService.deleteBenutzer(id);
}
}
create-benutzer.dto.ts
export class CreateBenutzer {
@IsString()
@MinLength(4)
@MaxLength(20)
readonly Benutzername: string;
@IsString()
@MinLength(4)
@MaxLength(20)
//@Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,
//{message: 'das Passwort ist zu schwach'})
readonly Passwort: string;
readonly istAdmin: boolean;
readonly istVorgesetzter: boolean;
readonly Vorgesetzter: number;
readonly Vorname: string;
readonly Nachname: string;
readonly Geburtsdatum: Date;
readonly Email: string;
readonly Eintrittsdatum: Date;
readonly arbeitstage: Arbeitstage;
readonly bundesland: Bundesland;
}
【问题讨论】:
-
什么是 createBenutzerDTO?您需要使用此 dto 创建一个类型为“benutzer”的实体,然后执行更新操作。如果这不起作用,请改用存储库的保存功能
-
可以分享createBenutzerDTO代码吗?
-
@Youba 我添加了 dto 文件。