Каскад TypeORM не работает с UNIQUE Column - PullRequest
0 голосов
/ 15 февраля 2020

Я создаю API блога и имею 2 сущности posts и terms, связанные вместе с помощью отношения many to many.

В моей сущности терминов у меня есть столбец UNIQUE с именем slug, который необходимо настроить для предотвращения дублирования терминов.

Поэтому, когда я создаю новый пост с новым термином все хорошо.

Проблема возникает, когда я пытаюсь создать новое сообщение с существующим term slug, которое выдает ошибку дублирования вместо обновления.

Это происходит потому, что мой столбец слага UNIQUE не является моим первичным ключом, и я не могу передать id с запросом, поскольку он сгенерирован и неизвестен !!.

Так что мой Вопрос в том, как исправить этот конфликт?

Мой пост сущности:

@Entity('posts')
export class Post {

    @PrimaryGeneratedColumn({
        type: 'bigint'
    })
    id: number;

    // ...
    @ManyToMany(type => Term, term => term.posts, {cascade: true, eager: true,})
    @JoinTable({
        name: 'TermsPostsRelations',
        joinColumn: {
            name: 'postId',
            referencedColumnName: 'id'
        },
        inverseJoinColumn: {
            name: 'termId',
            referencedColumnName: 'id'
        }
    })
    terms: Term[];

}

Мой термин сущность:

@Entity('terms')
export class Term {

    @PrimaryGeneratedColumn({
        type: 'bigint'
    })
    id: number;

    //...
    @Column({
        unique: true,
    })
    slug: string;

}

Пример моего запроса на создание нового поста с термином;

{
    "date": "2020-02-14T14:51:37",
    "title": "test post",
    "slug": "test-post",
    "link": "https://www.almuraba.net/news_view_314036.html",
    "metdata": [{
        "key": "video",
        "value": "https:yt.com"
    }],
    "terms": [{
        "name": "test term",
        "slug": "test-term",
        "taxonomy": "category"
    }]
}
...