我想在TypeORM中创建一个一对多的关系,其中的字段不是id,通常的关系如下所示,但是在同一个示例中,假设User表的列name也是唯一的,现在我想在关系中引用它,那么照片中的外键将包含值name并且在Photos表中给予它不同于userId的不同列名例如userName,我到底该怎么做,我被卡住了,坦率地说霍韦不知道该怎么做。
User
name
Photos
userId
userName
pod7payv1#
如果希望关系指向id以外的列,则必须将referencedColumnName: '<column name here>'添加到@JoinColumn()选项中。例如:
id
referencedColumnName: '<column name here>'
@JoinColumn()
@Entity() export class Photo { @PrimaryGeneratedColumn() id: number; @Column() url: string; @ManyToOne(() => User, user => user.photos) @JoinColumn({ name: 'userName', referencedColumnName: 'name' }) user: User; }
此外,请注意从typeORM的Angular 指定referencedColumnName,而不是真正的基础驱动程序列名。例如,如果要引用名为user_name的列,但实体的属性使用camelCase userName,则必须指定:
user_name
referencedColumnName: 'userName'
如果指定数据库列名,则会出现错误,指出typeORM无法在实体定义中找到引用的列。
7kjnsjlb2#
@Entity() export class Photo { @PrimaryGeneratedColumn() id: number; @Column() url: string; @ManyToOne(() => User, user => user.photos) @JoinColumn({ name: 'userName' }) // < -- add this line user: User; } @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @OneToMany(() => Photo, photo => photo.user) photos: Photo[]; }
2条答案
按热度按时间pod7payv1#
供将来参考
如果希望关系指向
id
以外的列,则必须将referencedColumnName: '<column name here>'
添加到@JoinColumn()
选项中。例如:
此外,请注意从typeORM的Angular 指定referencedColumnName,而不是真正的基础驱动程序列名。例如,如果要引用名为
user_name
的列,但实体的属性使用camelCaseuserName
,则必须指定:如果指定数据库列名,则会出现错误,指出typeORM无法在实体定义中找到引用的列。
7kjnsjlb2#