我在postgresql数据库中使用Typeorm创建了以下实体:
@Entity('issuer')
export class Issuer {
@PrimaryColumn()
issuer_id: string
@OneToOne(() => UserData, { cascade: true })
@JoinColumn({ name: 'issuer_id', referencedColumnName: 'public_address' })
u_data: UserData
@BeforeInsert()
newid() {
this.issuer_id = this.u_data.public_address
}
...remaining columns...
}
@Entity('user_data')
export class UserData {
@PrimaryColumn({ type: 'varchar', unique: true })
email: string
@Column({ type: 'varchar', nullable: false, unique: true })
public_address: string
...remaining columns...
}
在上面的Issuer实体中,我使用了一个小技巧,可以创建一个主键和外键,即issuer_id
列,它是Issuer的主键,而UserData的外键引用UserData的public_address列。我想联接这两个实体,我可以使用以下查询来实现:
SELECT *
FROM user_data
LEFT OUTER JOIN issuer ON issuer.issuer_id = user_data.public_address
WHERE user_data.email = $1
我无法将这个简单的SQL代码转换成Typeorm查询生成器。以下是我失败的尝试:
await this.userRepository
.createQueryBuilder('user')
.leftJoin('user.public_address', 'issuer')
.where('user.email = :email', { email })
.getOne()
下面是我得到的错误:
TypeORMError: Relation with property path public_address in entity was not found.
1条答案
按热度按时间yqyhoc1h1#
当试图从一个与其亲属没有直接关系的实体进行左连接(typeorm上不存在右连接)时,
leftJoinAndSelect
函数应该与一个条件一起使用: