[英]TypeOrm update Entity not updating related one
我有這個實體:
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column()
password: string;
@Column({ default: false })
activated: boolean;
@OneToOne(() => UserAnag, (userAnag) => userAnag.user)
useranag: UserAnag;
}
和這個相關實體
@Entity()
export class UserAnag {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
surname: string;
@OneToOne(() => User, (user) => user.useranag, {
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
})
@JoinColumn()
user: User;
這是我的更新 function:
async update(id: number, attrs: Partial<UpdateUserDto>) {
const user = await this.findById(id);
if (!user) {
throw new NotFoundException('User not found');
}
if (attrs.useranag) {
const useranag = Object.assign(user.useranag, attrs.useranag);
Object.assign(user, attrs);
user.useranag = useranag;
} else {
Object.assign(user, attrs);
}
return this.repo.save(user);
}
我的 findById function
if (!id) {
return null;
}
const user = await this.repo.find({
where: { id: id },
relations: { useranag: true },
});
return user[0];
}
如果我對此進行調試,我可以看到userEntity已正確更新,並且返回也已更新正確的 object 但在數據庫上,只有User實體已正確更新,而不是 Useranag 實體。 我嘗試在 Useranag 上設置 eager 但遇到同樣的問題。 數據庫僅在 User 中更新,而不在 Useranag 中更新
附加信息:我正在記錄查詢,在更新之前,select 只有 useranag 實體上的 id 和 userId 明顯等於原始並且沒有啟動更新查詢
級聯語法不同。 您可以將其設置為cascade: true
或要級聯的操作列表
@OneToOne(() => User, (user) => user.useranag, {cascade: true})
@JoinColumn()
user: User;
@OneToOne(() => User, (user) => user.useranag, {cascade: ['update', 'delete']})
@JoinColumn()
user: User;
資料來源: https://orkhan.gitbook.io/typeorm/docs/relations#cascades
我已經解決了這個問題。 我混淆了 onUpdate 和 cascade: ['update']
我發現更新相關實體的正確方法是在我要更新的實體中設置cascade: ['update']
,而不是在相關實體中。
所以正確的代碼是:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column()
password: string;
@Column({ default: false })
activated: boolean;
@OneToOne(() => UserAnag, (userAnag) => userAnag.user, {
cascade: ['update'],
})
useranag: UserAnag;
}
和
@Entity()
export class UserAnag {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
surname: string;
@Column()
psn: string;
@Column()
discord: string;
@Column()
drivernumber: number;
@OneToOne(() => User, (user) => user.useranag, {
onDelete: 'CASCADE',
})
@JoinColumn()
user: User;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.