mysql - 如何使用 onDelete : 'CASCADE' on one-to-one relationship

标签 mysql typescript nestjs typeorm

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

用户实体

@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;

}

个人资料实体

@Entity()
export class Profile {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    gender: string;

    @Column()
    photo: string;

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

}

我如何删除用户。

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

await user.remove()

用户已被删除,但用户的个人资料没有任何变化。

Can anyone explain how to delete relationship on one-to-one?

最佳答案

用户

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

    @Column()
    name: string;

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

简介

@Entity()
export class Profile {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    gender: string;

    @Column()
    photo: string;

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

}

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

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)

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

编辑:github 上提出问题

关于mysql - 如何使用 onDelete : 'CASCADE' on one-to-one relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64002621/

相关文章:

typescript - 解构对象时重命名和添加类型

angular - ionic 2 多选与全选复选框

javascript - 如何使用 NestJS 将纯文本作为我的请求正文传递?

mysql - 如何选择一列中可在两个不同列中使用的值列表?

php - 注册表错误无法显示。输入也无法插入到mysql

mysql - 在sql中按列转换数据行

postgresql - TypeORM 找不到\"MyEntity\"的元数据

mysql - 类型错误 : Cannot read property 'name' of undefined

javascript - Angular 中 tsconfig.json 文件的 lib 数组中的 dom 是什么?

nestjs - 如何发布包含实体数组的 DTO?