Отношения типа - сохранить по идентификатору - PullRequest
0 голосов
/ 07 марта 2020

Я был немного смущен отношениями, так как я привык сохранять отношения по идентификатору, в то время как документы и примеры, которые я нашел, предлагают получить весь объект и использовать его вместо этого (не странно ли это ???)

Я нашел это на github для решения этой проблемы (https://github.com/typeorm/typeorm/issues/447), где они предлагают использовать объект только со свойством id, но это с 2017 года. Это хороший способ сделать Это ? И это все еще единственный способ сделать это? (Я нахожу это довольно хромым)

async create( @Body() product: Product) {
    product.category = <any>{ id: product.category };
    return { payload: await this.repository.persist(product) };
}

Еще один предложил назвать столбец как categoryId, и он будет работать как положено (с идентификатором вместо объекта), но ПОЧЕМУ? Какое отношение имя имеет к этому ??

@Entity()
class Product {

     @Column({ type: "int", nullable: true })
     categoryId: number;

     @ManyToOne(type => Category)
     @JoinColumn({ name: "categoryId" })
     category: Category;

}

Я просто запутался, помогите ^ _ ^

1 Ответ

1 голос
/ 08 марта 2020

Разве это не странно ???

Зависит от того, как вы к этому относитесь, но да, мне также нравится иметь возможность просто установить идентификатор, а не получить всю связанную информацию сущность.

Это хороший способ сделать это? И это все еще единственный способ сделать это?

Я также нахожусь в процессе выяснения typeorm. Я обнаружил, что вы можете сделать:

product.category = <any>3;
// or
product['category' as any] = 3;
repository.save(product) // I don't know how you have the persist() method.

и, в вашем случае, столбец product.categoryId будет установлен на 3. Если categoryId является внешним ключом, и вы устанавливаете несуществующий идентификатор , вы получите ошибку внешнего ключа, как и должны.

Но в этом случае ts будет думать, что product.category имеет тип Category. Вы также можете указать свойство category как Category | number. Но тогда вам придется делать проверки типов везде, что раздражает. Я немного проверил это, но я не уверен, что это вызовет некоторые ничего не подозревающие ошибки.

Какое отношение имя имеет к этому ??

Хорошо, вы предоставили опцию, чтобы определить 2 свойства: category, которое является отношением, и categoryId, которое является столбцом. Свойство categoryId должно быть названо как столбец в таблице, но вы также можете передать name: 'actual_name' в @Column декоратор. Я не знаю, что произойдет, если вы установите свойства columnId и column с разными идентификаторами.

...