Вставка Typeorm с отношением ID - PullRequest
1 голос
/ 22 апреля 2020

Я использую typeorm, просто хочу вставить строку, используя relationId. Но это не работает, как я ожидал.

Вот моя сущность,

@Entity()
export default class Address extends BaseEntity {

    @Column({
        type: 'varchar',
        length: 255,
    })
    public title: number;

    @Column({
        type: 'varchar',
        length: 2000,
    })
    public value: number;

    @ManyToOne(type => User, user => user)
    @JoinColumn({ name: 'userId' })
    public user: User;

    @RelationId((address: Address) => address.user)
    public userId: number;

}

Когда я пытаюсь добавить, как в примере ниже, он добавляет нулевой userId, который я не ожидал

{
    "title": "My home address",
    "value": "Lorep Ipsum Sit Amet",
    "userId": 4
}

enter image description here

Когда я меняю полезную нагрузку на, все работает отлично.

{
    "title": "Ev adresim",
    "value": "Nova Suites",
    "user": 4
}

Я не хочу использовать, как указано выше, полезную нагрузку. Я пристрастился к определению именования переменных. Спасибо за весь вклад и за все ответы.

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Декоратор @RelationId работает в одном направлении. Как написано в документации :

Загружает идентификатор (или идентификаторы) указанных c отношений в свойства.

Идентификатор отношения используется только для представления. Базовое отношение не добавляется / не удаляется / не изменяется при сцеплении значения.

Как и предполагалось, вы можете использовать декоратор @Column для обновления значения.

1 голос
/ 26 апреля 2020

Похоже, что это проблема TypeORM с декоратором @RelationId: https://github.com/typeorm/typeorm/issues/3867.

Вместо использования @RelationId вы можете декорировать userId с помощью @Column, когда имя of JoinColumn равен имени столбца числа, TypeORM соответствует обоим, и вы можете установить userId или пользователя, и TypeORM будет обрабатывать его:

@ManyToOne(type => User, user => user)
@JoinColumn({ name: 'userId' })
public user: User;

@Column()
public userId: number;
...