如何在一对一关系上使用 onDelete: 'CASCADE'

the*_*eNu 3 mysql typescript typeorm nestjs

当用户被删除时,我尝试删除用户的个人资料。但它并没有删除个人资料上的任何内容。

用户实体

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToOne(type => Profile, profile => profile.user, 
              { eager: true, cascade: true, onDelete: 'CASCADE' })
    @JoinColumn()
    profile: Profile;

}
Run Code Online (Sandbox Code Playgroud)

配置文件实体

@Entity()
export class Profile {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    gender: string;

    @Column()
    photo: string;

    @OneToOne(type => User, user => user.profile)
    user: User;

}
Run Code Online (Sandbox Code Playgroud)

我如何删除用户。

const userRepository = connection.getRepository(User);
const user = await userRepository.findOne({ where: {id: 'someuserId'}, relations: ["profile"] });

await user.remove()
Run Code Online (Sandbox Code Playgroud)

用户已被删除,但用户的个人资料上没有任何反应。

谁能解释如何删除一对一的关系?

Gau*_*rma 8

用户

@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToOne(type => Profile, profile => profile.user, 
              { eager: true, onDelete: 'CASCADE' })
    @JoinColumn()
    profile: Profile;
}
Run Code Online (Sandbox Code Playgroud)

轮廓

@Entity()
export class Profile {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    gender: string;

    @Column()
    photo: string;

    @OneToOne(type => User, user => user.profile, { onDelete: "CASCADE" })
    user: User;

}
Run Code Online (Sandbox Code Playgroud)

我运行了这段代码来从两个实体中删除条目。

const userRepository = connection.getRepository(User);
const user = await userRepository.findOne({ where: {id: 'someuserId'} });

const profileRepository = connection.getRepository(Profile);
const profile = await profileRepository.findOne({ where: {id: user.profile.id} });

await profileRepository.remove(profile)
Run Code Online (Sandbox Code Playgroud)

这是一对一关系的预期行为。您必须删除引用端才能使级联删除生效。讨论链接

编辑:在github上提出问题