【问题标题】:NestJs, TypeOrm) Delete request with 2 ParamsNestJs, TypeOrm) 使用 2 个参数删除请求
【发布时间】:2022-08-17 11:55:55
【问题描述】:

我只想允许帖子的作者从数据库中删除帖子。

当向控制器请求删除时,typeORM 打算 delte({id, user}) 通过将帖子 ID 和用户信息一起发送,但发生错误。

//entity

@Entity()
export class Board extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column()
  description: string;

  @Column()
  status: BoardStatus;

  @ManyToOne((type) => UserEntity, (user) => user.boards, { eager: false })
  user: UserEntity;
}

// controller

  @Delete(\':id\')
  deleteBoard(
    @Param(\'id\', ParseIntPipe) id: number,
    @GetUser() user: UserEntity,
  ): Promise<void> {
    return this.boardService.deletBoard(id, user);
  }
// service

  async deletBoard(id: number, user: UserEntity): Promise<void> {
    const result = await this.boardRepository.delete({ id, user });

    /* Argument of type \'{ id: number; user: UserEntity; }\' is not assignable to parameter of type \'string | number | Date | ObjectID | string[] | number[] | Date[] | ObjectID[] | FindOptionsWhere<Board>\'.
  Types of property \'user\' are incompatible. */

    if (result.affected === 0)
      throw new NotFoundException(`Can\'t find by ${id}`);
  }
  • 你能显示 user.entity 和 typeorm 版本吗

标签: nestjs typeorm


【解决方案1】:

尝试createQueryBuilder()

await this.boardService.createQueryBuilder('board')
.leftJoin('board.user', 'user')
.where('board.id = :id', {id})
.andWhere('user.id = :id', {id: user.id})
.delete()
.execute();

【讨论】:

    猜你喜欢
    • 2021-05-03
    • 2018-12-25
    • 2019-11-12
    • 2021-04-28
    • 2020-07-13
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多