web-dev-qa-db-fra.com

TYPEFORM: Comment se définir explicitement sans avoir de biens pour charger des relations?

Je ne veux pas créer de propriété pour le chargement de la relation (comme indiqué dans tous les exemples). La seule chose dont j'ai besoin est d'avoir un une propriété de clé étrangère explicite Pour que le migration Pourra créer des contraintes appropriées dans la base de données. Le décorateur le plus proche de celui que j'ai besoin est @ RelationID mais cela nécessite toujours la présence d'une propriété de la classe relationnelle.

Pour plus de clarté, prenons l'exemple de la documentation:

@Entity()
export class Post {
    @ManyToOne(type => Category)
    category: Category;

    @RelationId((post: Post) => post.category) // it still requires the presence of the `category` proeprty
    categoryId: number;

}

Je n'ai pas besoin de la propriété category ici. Je veux avoir la propriété categoryId et la marque comme clé étrangère à Category.Id. Ça devrait ressembler à ça:

@Entity()
export class Post {

    @ForeignKey((category: Category) => category.Id) // it's a foreign key to Category.Id
    categoryId: number;

}

Est-il possible?

7
Sergey

"J'ai besoin d'avoir une propriété de clé étrangère explicite" ...

Non, tu ne pouvais pas. Typeorm créera automatiquement une propriété de clé étrangère lorsque vous utilisez @manytoone Decorator. Il suffit de combiner @manytoone et des décorateurs @Joincolumns comme ceci:

@ManyToOne(type => Category)
@JoinColumn({ name: 'custom_field_name_if_you_want' })
category: Category;
2
charles

Vérifiez auprès de ces deux lieux Module d'authentification (JWTMODULE.EGISTER ()) et Stratégie JWT (Super ({...})). Assurez-vous d'avoir Secret/SecretorKey est défini sur la même clé. Dans mon cas "Secret: processus.env.jwt_secret_key" & "Secrettorkey: processus.env.jwt_secret_key"

1
Sunny Tare

C'est en fait possible de le faire:

@Entity()
export class Post {
    // this will add categoryId
    @ManyToOne(type => Category)
    category: Category;

    // and you can use this for accessing post.categoryId
    // only column you mark with @Column decorator will be mapped to a database column 
    // Ref: https://typeorm.io/#/entities
    categoryId: number;

}

L'ajout categoryId ne sera pas mappé sur la colonne et utilisera ensuite pour définir explicitement l'ID ou pour accéder à sa valeur comme dans:

 post.categoryId = 1;
 // or 
 const id = post.categoryId
0
tbuglc