typeorm define:
@Entity({ name: 'person' })
export class Person extends BaseEntity {
@PrimaryColumn({ type: 'varchar' })
key!: string;
@OneToOne(() => PersonMeta, { cascade: true })
@JoinColumn({ name: 'key', referencedColumnName: 'key', foreignKeyConstraintName: 'metaKey' })
meta!: MetaDB;
}
@Entity({ name: 'personMeta' })
export class PersonMeta extends BaseEntity {
@PrimaryColumn({ type: 'varchar' })
key!: string;
@Column()
@Index()
age!: number;
}
@Entity({ name: 'house' })
export class House extends BaseEntity {
@PrimaryColumn({ type: 'varchar' })
key!: string;
@OneToOne(() => Person, { cascade: true })
@JoinColumn({ name: 'owner', referencedColumnName: 'key', foreignKeyConstraintName: 'ownerKey' })
owner!: FNodeDB;
}
and how to query one house's owner with his personMeta ?
const owner = Person.findOneBy({ key: 'xxx', name: 'eczn' });
if (!owner) throw new Error('not found');
const house = await House.findOne({
relation: { owner: true },
// relation: { owner: true, meta: true }, runtime error if adding 'meta:true'
where: { owner },
});
console.log('house owner age is:', house.owner.meta.age);
// but it will throw error: house.owner.meta is undefined
how to OneToOneToOne ?
found an usage of relation field and works:
const house = await House.findOne({
relation: ['owner', 'owner.meta'],
where: { owner },
});
console.log(house.owner.meta); // works