我正在尝试创建一个与TypeORM和TypeGraphQL的双向OneToOne关系。我有两个实体Account.ts和Details.ts。
现在,我可以在帐户的上下文中创建详细信息,它成功地填充了上下文中的帐户id。
但是,在my Account表中,detailsId字段(外键)保持为空,并且不会更新。因此,我不能在上下文中查询详细信息。
下面是我的Account.ts实体
@ObjectType()
@Entity()
export class Account extends BaseEntity {
@Field()
@PrimaryGeneratedColumn()
id: number;
@OneToOne(() => Details, (detail) => detail.user, {cascade: true, eager: true})
@Field(() => Details)
@JoinColumn()
detail: Details;
}这是我的Details.ts实体。
@ObjectType()
@Entity()
export class Details extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Field()
@Column()
title: string;
@Field()
@Column()
userId: number;
@OneToOne(() => Account, (user: Account) => user.detail)
user: Account;
}这是我的解析器。
@Mutation((_returns) => Details)
@UseMiddleware(isAuth)
async addDetails(
@Arg("title") title: string,
@Ctx() { req }: MyContext
): Promise<Details> {
const details = this.detailsRepository.create({
title,
userId: req.session.userId,
});
return await this.detailsRepository.save(details);
}我相信我定义的实体是错误的,否则外键将在Account.ts表中可用。
任何帮助都是非常感谢的。
发布于 2020-09-16 02:50:44
问题出在我的变种()中--细节会被保存,但即使使用{ cascade: true },也不会将其保存到账号存储库。
通过在将细节也保存在detailsRepository中之后,在accountRepository中显式地将细节保存给用户。
@Mutation((_returns) => Boolean)
@UseMiddleware(isAuth)
async addDetails(
@Arg("title") title: string,
@Ctx() { req }: MyContext
) {
const details = this.detailsRepository.create({
title,
userId: req.session.userId,
});
await this.detailsRepository.save(details);
const user = await this.accountRepository.findOne(req.session.userId);
if (!user) {
return false;
}
if (user) {
user.details = details;
await this.accountRepository.save(user);
}
return true;
}https://stackoverflow.com/questions/63892359
复制相似问题