TypeORM можно найти () с отношениями - PullRequest
0 голосов
/ 11 марта 2020

Я впервые использую TypeORM и, к сожалению, должен использовать JavaScript. Документы в основном сосредоточены на TypeScript, поэтому я застрял, пытаясь получить запись со всеми связанными другими записями.

module.exports = {
    name: "recordings",
    columns: {
        id: {
            type: "uuid",
            primary: true,
            generated: "uuid"
        },
        title: {
            type: "text",
            unique: true,
            nullable: false
        },
        file: {
            type: "text",
            unique: true,
            nullable: false
        }
    },
    relations: {
        recordingAnnotations: {
            target: "recordingAnnotations",
            type: "one-to-many",
            joinTable: true,
        }
    }
};

module.exports = {
    name: "recordingAnnotations",
    columns: {
        id: {
            type: "uuid",
            primary: true,
            generated: "uuid"
        },
        startsAt: {
            type: "int",
            nullable: false
        },
        endsAt: {
            type: "int",
            nullable: false
        },
        content: {
            type: "text",
            unique: true,
            nullable: false
        }
    },
    relations: {
        recording: {
            target: "recordings",
            type: "many-to-one",
            nullable: false,
            onDelete: "CASCADE"
        }
    }
};

Теперь я хочу найти запись recording со всеми аннотациями.

const repo = conn.getRepository(Recording.name);
const result = await repo.find({
    where: { id },
    relations: [ "recordingAnnotations" ]
});

Результат, который я пытаюсь получить, будет выглядеть следующим образом:

    id: "some-uuid",
    title: "Recording 1",
    file: "some-uuid",
    annotations: [
        { id: "some-uuid", startsAt: 0, endsAt: 10, content: "Hello!" },
        { id: "some-uuid", startsAt: 20, endsAt: 25, content: "Bye!" },
    ]

Полученная ошибка:

TypeError: Невозможно прочитать свойство 'joinColumns' из неопределенного

1 Ответ

0 голосов
/ 11 марта 2020

В схеме записей, нет необходимости в joinTable, так как он будет работать только для отношений «многие ко многим»,

relations: {
    recordingAnnotations: {
        target: "recordingAnnotations",
        type: "one-to-many",
        inverseSide: 'recording'
    }
}

Нам нужно указать inverseSide как recording, потому что мы добавили recording отношение в recordingAnnotations схеме и ManyToOne помещает внешний ключ в текущую таблицу сущностей.

В схеме recordingAnnotations

relations: {
    recording: {
        target: "recordings",
        type: "many-to-one",
        nullable: false,
        onDelete: "CASCADE",
        joinColumn: true
    }
}

Нам нужно указать joinColumn, который добавит recordingId (Внешний ключ) в таблице recordingAnnotations.

Дополнительно, вот полный пример использования отношения один-ко-многим: https://github.com/typeorm/typeorm/issues/2503#issuecomment -404834720

...