столкнулась с трудностями при работе с отношениями в PostgreSQL.
Мой стек: Nestjs, typeorm, postgres.
У меня есть две сущности: 'category' и 'categoryTranslation'. Очевидно, что 'categoryTranslation' служит для хранения переводов категорий и является важной частью многоязычной функциональности. Эти сущности разработаны с учетом простоты.
@Entity({ name: 'category' })
export class CategoryEntity {
@PrimaryGeneratedColumn()
id: number;
@Column('varchar')
name: string;
@Column('varchar')
description: string;
@OneToMany(
_type => CategoryTranslationEntity,
categoryTranslation => categoryTranslation.category,
)
categoryTranslation: CategoryTranslationEntity[];
}
@Entity({ name: 'category_translation' })
export class CategoryTranslationEntity {
@PrimaryGeneratedColumn()
id: number;
@Column('varchar')
name: string;
@Column('varchar')
description: string;
@Column('integer', { name: 'language_id' })
languageId: number;
@Column('integer', { name: 'category_id' })
categoryId: number;
@ManyToOne(_type => CategoryEntity, category => category.id, {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'category_id' })
category: CategoryEntity;
}
Как видно из структуры, сущность "categoryTranslation" отражает поля сущности "category", подлежащие переводу. Более того, она включает в себя дополнительные атрибуты languageId и categoryId, где categoryId служит в качестве ссылки.
Моим намерением было инициировать запрос с фронтенда для получения списка категорий. Я отправляю параметр languageId в заголовке, после чего выполняю операцию innerJoin и select с условием (которое, я признаю, может быть не совсем точным). После этого я получаю данные в следующем формате:
CategoryEntity {
id: 65,
name: 'Pumpkin pie',
description: 'Description for Pumpkin pie',
categoryTranslation: [ [CategoryTranslationEntity] ]
},
CategoryEntity {
id: 72,
name: 'Pickles',
description: 'Description for Pickles',
categoryTranslation: [ [CategoryTranslationEntity] ]
}
Перед отправкой данных обратно на фронтенд, я использую функцию map, которая заменяет атрибуты name и description сущности 'categoryEntity' на соответствующие атрибуты объекта 'categoryTranslationEntity'. В случаях, когда перевод отсутствует в 'categoryTranslation' или остается пустым, я сохраняю английский перевод в качестве запасного варианта.
Текущая проблема, с которой я сталкиваюсь, связана с трудностями в работе с функциональностями orderBy и textFilter. С моего понимания, использование операции innerJoin и выборки с третьим аргументом в качестве условия может привести к неожиданному поведению, что, как я понимаю, и происходит в моей ситуации. Исходя из этого контекста и понимания общей ситуации и кодовой базы, вы могли бы предоставить рекомендации по более эффективным стратегиям для управления моими сущностями перевода?