现在有一个user
表,和 profile
表,user
和 profile
是一对一关系;
添加正常,user 和 profile表都会有数据;
问题是 删除不正常,user表可以正常删除,profile删不掉
我看文的说是得加上关联关系,我这里都加上了,一直不好使,崩溃呃了
entity
如下:
user entity
import { Profile } from './profile.entity';
import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: 'varchar' })
name: string;
@OneToOne(() => Profile, (profile) => profile.user, {
cascade: true,
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
})
@JoinColumn()
profile: Profile;
}
profile entity
import { User } from './user.entity';
import { Column, Entity, OneToOne, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Profile {
@PrimaryGeneratedColumn()
id: number;
@Column()
gender: string;
@OneToOne(() => User, (user) => user.profile)
user: User;
}
user dto
import { Profile } from '../entities/profile.entity';
export class CreateUserDto {
name: string;
profile: Profile;
}
user controller
import { Controller, Post, Body, Param, Delete } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.userService.create(createUserDto);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.userService.remove(+id);
}
}
user service
import { Injectable, NotFoundException } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { User } from './entities/user.entity';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
@Injectable()
export class UserService {
@InjectRepository(User)
user: Repository<User>;
// 创建是正常的,user 和 profile表都会有数据
create(createUserDto: CreateUserDto) {
const user = new User();
user.name = createUserDto.name;
user.profile = createUserDto.profile;
return this.user.save(user);
}
// 问题出现在这里,只删除了user表的数据,profile表的数据没有删除掉
// 希望profile表的数据也能删除掉
async remove(id: number) {
const user = await this.user.findOne({
where: { id },
relations: ['profile'],
});
console.log(user);
if (!user) {
throw new NotFoundException();
}
return this.user.remove(user);
}
}
经过分析与实际操作,问题出现在实体逻辑错误!
正确的方案:吧一对一的关系放在profile里面就好了