Как правильно использовать соотношение «многие к одному» / «один ко многим» с помощью TypeORM (пример в документации в моем случае не работает)

#typescript #postgresql #typeorm

Вопрос:

Я некоторое время боролся с типом «многие к одному» / «один ко многим». Я внимательно следил за документацией по этому вопросу, но она не работает. Работа с postgresql, TS и type-graphql.

Вот код (без импорта и деталей, связанных с проблемой): Оценки сущностей

 @ObjectType()
@Entity()
export class Grades extends BaseEntity {
    @Field()
    @PrimaryGeneratedColumn()
    id!: number;

    @OneToMany(() => User, (user) => user.id)
    users: User[];

    [...]
}
 

Пользователь сущности

 @ObjectType()
@Entity()
export class User extends BaseEntity {
    @Field()
    @PrimaryGeneratedColumn()
    id!: number;

    @ManyToOne(() => Grades, (grades) => grades.users)
    grades: Grades;
}
 

Итак, у меня есть оценки, у которых может быть много Пользователей, и Пользователь, у которого может быть только одна оценка. Можно создать пользователя, создать оценку и назначить оценку пользователю (она хранится в столбце gradesId). Проблема возникает, когда я пытаюсь объединить оценки с назначенными им пользователями:

решатели.ts:

 @Query(() => [Grades], { nullable: true })
    async grades(
    ): Promise<Grades[]>{
        return Grades.find({relations: ["users"]})
    };
 

когда я запустил запрос, я получил:

 "TypeError: Cannot read property 'joinColumns' of undefined",
 

Вот как это выглядит в pgcli

Что я здесь упускаю?

Ответ №1:

Измените отношения вашей организации с оценками, как показано ниже:

 @OneToMany(() => User, (user) => user.grades)
users: User[];