首页 > 解决方案 > 删除一条与nest js有多对多关系的记录,输入ORM

问题描述

我在嵌套上有一个控制器,它有一个删除访问该服务的用户的方法。只有两个实体:用户和角色,具有多对多关系。我需要删除一个用户,但我不明白该怎么做。

users.service.ts:

import { Injectable } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm'
import { User } from './users.model'
import { Repository } from 'typeorm'
import { GetAllUsersDto } from './dto/getAllUsers.dto'
import { RolesService } from '../roles/roles.service'

@Injectable()
export class UsersService {

  constructor(
    @InjectRepository(User)
    private userRepository: Repository<User>,
    private rolesService: RolesService,
  ) {}

  async getAll(): Promise<GetAllUsersDto[]> {
    const users = await this.userRepository.find()
    return users.map(user => new GetAllUsersDto(user))
  }

  getByLogin(login: string): Promise<User> {
    return this.userRepository.findOne({ relations: ['roles'], where: { login } })
  }

  async create(user: User) {
    const role = await this.rolesService.getByName('Администратор')
    user.roles = [role]
    await this.userRepository.save(user)
    return true
  }

  async delete(login: string) {
    const user = await this.getByLogin(login)
    await this.userRepository.softDelete(user)
  }
}

模型 users.model.ts

import { BaseEntity, Column, Entity, JoinTable, ManyToMany, PrimaryColumn } from 'typeorm'
import { Role } from '../roles/roles.model'

@Entity()
export class User extends BaseEntity {
  @PrimaryColumn({
    type: 'varchar',
    unique: true,
    nullable: false
  })
  login: string

  @Column({
    type: 'varchar',
    nullable: false
  })
  name: string

  @Column({
    type: 'varchar',
    nullable: false
  })
  password: string

  @ManyToMany(() => Role, role => role.users, {
    cascade: true
  })
  @JoinTable()
  roles: Role[]
}

模型角色.models.ts

import { BaseEntity, Column, Entity, ManyToMany, PrimaryGeneratedColumn } from 'typeorm'
import { User } from '../users/users.model'

@Entity()
export class Role extends BaseEntity {
  @PrimaryGeneratedColumn({
    type: 'int'
  })
  id: number

  @Column({
    type: 'varchar',
    unique: true,
    nullable: false
  })
  name: string

  @ManyToMany(() => User, user => user.roles)
  users: User[]
}

据我了解,我需要从联结表中删除一条记录,但我不明白如何访问它。

标签: typescriptnestjstypeorm

解决方案


推荐阅读