javascript - relação do TypeORM com um campo além do id
Eu queria criar uma relação de um-para-muitos no TypeORM com um campo diferente de id, a relação usual se parece com isso, mas no mesmo exemplo, digamos, por exemplo, que a coluna name da tabela User também fosse única, agora eu quero referenciar isso na relação, de forma que a chave estrangeira em photos contenha o valor de name e dar a ela um nome de coluna diferente na tabela Photos em vez de userId, por exemplo userName, como exatamente eu faria isso, estou travado e, francamente, não faço a menor ideia de como proceder.
Resposta #1
Para referência futura
Se você quiser que sua relação aponte para uma coluna diferente de id, você deve adicionar referencedColumnName: '<nome da coluna aqui>' às opções do seu @JoinColumn().
ex.:
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number;
@Column()
url: string;
@ManyToOne(() => User, user => user.photos)
@JoinColumn({ name: 'userName', referencedColumnName: 'name' })
user: User;
}
Além disso, tenha cuidado ao especificar o referencedColumnName do ponto de vista do typeORM, e não o nome real da coluna do driver subjacente. Por exemplo, se você quiser referenciar uma coluna chamada user_name, mas a propriedade da sua entidade usa camelCase userName, você deve especificar:
referencedColumnName: 'userName'
se você especificar o nome da coluna do banco de dados em vez disso, você receberá erros reclamando que o typeORM não pôde encontrar a coluna referenciada na definição da sua entidade.
Resposta #2
@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[];
}
