我有三個表 user,userCareerProfile,userPersonalProfile 與 @OneToOne 關系。
用戶物體:
@Entity({ name: 'users' })
export class User extends AbstractEntity {
@Column({ unique: true })
email: string;
@Column({ type: 'varchar', length: 50 })
full_name: string;
@OneToOne(() => UserPersonalProfile, (details) => details.user)
personal_details: UserPersonalProfile;
@OneToOne(() => UserCareerProfile, (career) => career.user)
career_profile: UserCareerProfile;
}
個人資料物體:
@Entity()
export class UserPersonalProfile extends AbstractEntity {
@Column({ type: 'varchar', length: 20, nullable: true })
date_of_birth: string;
@Column({ type: 'varchar', length: 200, nullable: true })
address: string;
.....
@OneToOne(() => User, (user) => user.personal_details, {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'user_id' })
user: User;
}
職業簡介物體:
@Entity()
export class UserCareerProfile extends AbstractEntity {
@Column({ type: 'varchar', length: 100, nullable: true })
job_role: string;
@Column({ type: 'varchar', length: 100, nullable: true })
work_location: string;
.....
@OneToOne(() => User, (user) => user.career_profile, {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'user_id' })
user: User;
}
問題:當我創建一個新用戶時,一個新行被添加到用戶表中,但其他兩個表中沒有插入記錄。如何根據新創建的用戶在兩個表中插入行?
用戶服務:
public async createUser(userAttrs: Partial<User>): Promise<User> {
const user = await this._usersRepository.save(
this._usersRepository.create({
...userAttrs,
}),
);
return user;
}
uj5u.com熱心網友回復:
在您的User物體上指定裝飾器cascade上的選項。@OneToOne()您可以將其設定為true、insert、update、remove或。為您的用例選擇所需的限制。將其設定為或應該在資料庫中插入相關物件。soft-removerecovertrueinsert
還將裝飾器應用于@JoinColumn()關系的這一側。這意味著該表將包含一個“關系 ID”和另一個表的外鍵。
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ unique: true })
email: string;
@Column({ type: 'varchar', length: 50 })
name: string;
@OneToOne(() => Profile, (profile) => profile.user, { cascade: true })
@JoinColumn()
profile: Profile;
}
這是一個示例Profile物體。
@Entity()
export class Profile {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: 'varchar', length: 20, nullable: true })
date_of_birth: string;
@OneToOne(() => User, (user) => user.profile)
user: User;
}
然后使用存盤庫保存新User實體。
例如:
const profile: Profile = new Profile();
profile.date_of_birth = '01/01/1984';
const user: User = new User();
user.email = '[email protected]';
user.name = 'John';
user.profile = profile;
await this.userRepository.save(user);
這將保留用戶和組態檔。在用戶記錄profile_id中,會自動為您添加一個指向組態檔主鍵的列。
用戶

輪廓

https://github.com/typeorm/typeorm/blob/2e671386f486dab908c54a9488334dc54f82c735/src/decorator/options/RelationOptions.ts#L16
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498450.html
標籤:打字稿 PostgreSQL 巢穴 打字机
