As we know, to create ManyToOne/OneToMany relation we have to use @ManyToOne/@OneToMany decorators on a field.
In my project I have two entities: Project and Position.
This is how I created a relation:
@Entity('positions')
export class Position {
@ManyToOne(() => Project, {
nullable: false,
eager: true,
})
@JoinColumn()
project: Project;
}
TypeORM documentation says this code will create projectId FOREIGN KEY column in the database and store a project id in it.
Then when we trying to access project property TypeORM loads a project by the id stored in projectId field.
QUESTION
How can I access that pojectId field without loading a relational entity?
The property projectId does not exists by default in Position entity and if I manually create it it is not populated by projectId column value.
I have tried this way:
@ManyToOne(() => Project, {
nullable: false,
eager: false,
})
@JoinColumn()
project: Project;
projectId: string;
CodePudding user response:
You can use the @RelationId decorator exported by typeorm. Using your example:
import {
Column,
Entity,
ManyToOne,
RelationId,
JoinColumn,
} from 'typeorm'
@Entity()
export class Position {
@ManyToOne(() => Project, {
nullable: false,
eager: false,
})
@JoinColumn()
project: Project;
@Column()
@RelationId((position: Position) => position.project)
projectId: string;
}
