簡體   English   中英

TypeORM - EntityColumnNotFound:未找到實體列“anträge”

[英]TypeORM - EntityColumnNotFound: No entity column "anträge" was found

我試圖在我的 Angular 前端更新一個實體,在我的例子中是一個用戶 (Benutzer),但我收到錯誤EntityColumnNotFound:沒有找到實體列“anträge”。 在 NestJS(TypeORM)中。 當我使用 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);
  }
}

創建-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;
}

要解決您的問題,您可以使用 Save 方法更新實體:
原因是 save 方法執行的是原始操作,沒有級聯和關系操作。

 async updateBenutzer(id: number, createBenutzerDTO: CreateBenutzer) {

 let benutzerUpdate= await this.benutzerRepository.findOne({ BenutzerID:id});
 if(!benutzerUpdate) throw new NotFoundException({message:"Benutzer doesn't exist" });

    return this.benutzerRepository.save({...benutzerUpdate,...createBenutzerDTO});

  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM