正如标题所说:
我有一个business-user
表和一个business-hours
表。CCD_ 3与CCD_ 4具有ManyToOne关系。
business-hours
侧的关系定义如下。
@ManyToOne(() => BusinessUser, (businessUser) => businessUser.businessHours)
@JoinColumn()
businessUser: BusinessUser;
Typeorm文档说,这应该在表中创建一个字段businessUserId
,它确实这样做了。此外,由于这是主键上的关系,所以我不需要命名或引用它。但是当我执行find
或findOne
查询时,businessUserId
不再返回。当我检查数据库时,字段和值按预期存在,只是它们不会在find查询中返回。早些时候它工作得很好,我得到了所有表的关系表id,但现在它不再工作了。想知道是否有人能帮我,或者弄清楚发生了什么变化。我已经尝试过这里提出的类似问题的解决方案,但没有任何帮助。
有一个"官方的";官方文档上的变通方法。它解释了";如何在不连接关系的情况下使用关系id";。
总之,您只需要向您的实体添加一个myRelationId
(在您的情况下,是businessUserId)
列(,如下所示(例如(:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column({ nullable: true })
profileId: number; // <---------- You'll get only the id from here
@OneToOne(type => Profile)
@JoinColumn()
profile: Profile; // <----------- You don't want all the data
}
如果你这样做,显然,从你的请求中删除{relations : ["businessUser"]}
。
您可以尝试设置此loadRelationIds:true
例如,我使用这样的东西:
async findAByConditionWithRelationsOfUser(condition, relations, speaker_id) {
try {
let data: SentenceEntity[] = await this.sentenceRespository.find({ where: condition, relations: relations, loadRelationIds:true });
data = data.map(sentence => {
for (let i = 0; i < sentence.sentenceToSpeaker.length; i++) {
const element = sentence.sentenceToSpeaker[i];
if (element.id == speaker_id) {
sentence['recordedAudio'] = element
};
}
delete sentence.sentenceToSpeaker;
return sentence;
})
return data;
} catch (error) {
throw new HttpException(error, error.status)
}
}
在保存之前,当导入用户关系选项和businessUser是businessUser 的数组时,使用多对多关系一侧的级联来保存到两个表中
@ManyToOne(() => BusinessUser, (businessUser) => businessUser.businessHours ,{ cascade : true})
@JoinColumn()
businessUser: BusinessUser[];
const foundOne = await this.entity.findOne(id , {relations : ["businessUser"]})
const foundAll = await this.entity.findOne({relations : ["businessUser"]})
如果你想自动加载它,请使用热切的
@ManyToOne(() => BusinessUser, (businessUser) => businessUser.businessHours ,{ cascade : true , eager : true})
@JoinColumn()
businessUser: BusinessUser[];