在解释我当前面临的问题时,我会尽量保持清楚。
CategoryEntity
类中的一段代码。
category.entity.ts
@ManyToMany(type => EntryEntity, entry => entry.categories)
entries: EntryEntity[];
@ManyToOne(type => UserEntity, user => user.categories, {onDelete: 'CASCADE', cascade: true})
user: UserEntity;
@ManyToOne(type => CategoryEntity, category => category.subcategories)
category: CategoryEntity;
@OneToMany(type => CategoryEntity, category => category.category)
subcategories: CategoryEntity[];
我不久前才知道,这就是所谓的自引用(或修饰)实体。
这是我保存子类别的方式:
public async createCategoryByUserId(userId: number, createCategoryDto: CreateCategoryDto): Promise<void> {
const category = await this.categoryRepository.createQueryBuilder('category')
.where('category.user.id = :userId', {userId})
.andWhere('category.id = :id', {id: createCategoryDto.id})
.getOne();
const subcategory = new CategoryEntity();
subcategory.setName(createCategoryDto.name)
.setIsBaseTemplate(false)
.setSection(category.section);
await this.categoryRepository.save(subcategory);
const newCategory = new CategoryEntity();
Object.assign(newCategory, category);
const subcategories = (await this.categoryRepository.createQueryBuilder('category')
.where('category.user.id = :userId', {userId})
.andWhere('category.id = :id', {id: createCategoryDto.id})
.leftJoinAndSelect('category.subcategories', 's')
.getOne()).subcategories;
newCategory.subcategories = [...subcategories, subcategory];
await this.categoryRepository.save(newCategory);
问题是,在类别表中,每个类别都有一个用户ID,但子类别与类别(而不是用户)相关,而不是用户,其userId是NULL
s。
我正在尝试编写一个请求,该请求将通过用户ID和类别/子类别ID返回类别/子类别。我认为,如果子类别具有与之关联的userId,那会更容易。但是有可能吗?
也许我只是用错误的方式保存它,我是Typeorm的新手,对不起。