#postgresql #nestjs #typeorm
Вопрос:
Создавая продукт с именем категории, верните ошибку MaterializedPathSubjectExecutor.
Создание категорий работает. Но попытка сохранить продукт с категорией отношения приводит к ошибке.
Попробовал добавить в @OneToMany()
{
persistence:false, cascade:false, eager:true
}
Также попробовал @JoinColumn() с обеих сторон отношения
Функция возврата категории
async getCategories(category: string) {
const manager = getManager();
const cat = await manager
.getRepository(Category)
.findOne({
name: Like(category),
})
.catch((error) => {
console.error(error);
});
console.log(cat);
if (!cat) {
const cat = new Category();
cat.name = category;
cat.description = category;
return await manager.getRepository(Category).save(cat);
}
return cat;
}
Функция сохранения
async create(createdBy: string, productDto: CreateProductDto) {
const { name, price, isActive, description, category, images } = productDto;
const product = new Product();
product.name = name;
product.price = price;
product.isActive = !!isActive;
const creator = await this.usersService.findForId(createdBy);
product.createdBy = creator;
product.updatedBy = creator;
product.description = description;
product.images = await this.imageService.upload(images);
if (category) {
console.log('WHAT');
product.category = await this.getCategories(category);
}
return await this.productsRepository.save(product).catch((err) => {
console.error(err);
console.log(product);
});
Product.entity.ts
import { Image } from 'src/modules/image/entity/image.entity';
import { User } from 'src/modules/user/user.entity';
import { BaseEntity } from 'src/utility/entity/base.entity';
import {
Column,
Entity,
JoinColumn,
ManyToOne,
OneToMany,
Tree,
} from 'typeorm';
@Entity()
@Tree('materialized-path')
export class Product extends BaseEntity {
@Column()
name: string;
@Column()
price: number;
@Column({ type: 'varchar', length: 300 })
description: string;
@OneToMany(() => Image, (image) => image.product)
images: Image[];
@ManyToOne((type) => Category, (category) => category.products)
category: Category;
@ManyToOne((type) => User, (user) => user.products_created, { lazy: true })
@JoinColumn()
createdBy: User;
@ManyToOne((type) => User, (user) => user.products_created, { lazy: true })
@JoinColumn()
updatedBy: User;
}
Category.entity.ts
@Entity({ name: 'category' })
@Tree('materialized-path')
export class Category extends BaseEntity {
@Column({ type: 'varchar', length: 300 })
/**
* Name of category
* @example 'book'
* */
name: string;
@Column({ type: 'varchar', length: 300 })
description: string;
@TreeChildren()
children: Category[];
@TreeParent()
parent: Category;
@OneToMany((type) => Product, (product) => product.category)
products: Product[];
@ManyToOne((type) => User, (user) => user.category_created, { lazy: true })
@JoinColumn()
createdBy: User;
@ManyToOne((type) => User, (user) => user.category_updated, { lazy: true })
@JoinColumn()
updatedBy: User;
}
Ошибка: Сгенерировано
TypeError: Cannot read property 'getEntityValue' of undefined
at MaterializedPathSubjectExecutor.<anonymous>