Есть модель продукта, и геттер внутри нее, который считает цену со скидкой. Если делать выборку одного продукта, то вывести цену со скидкой получается, а при попытке вывести несколько продуктов выдает ошибку, что такого столбца нету.
entity:
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
@Column()
description: string
@Column()
code: string
@Column()
priceUAN: number
@Column({nullable: true})
priceUSD: number
@Column({type: 'int', default: 0})
sale: number
@Column()
availableQuantity: number
@Column({default: true})
isAvailable: boolean
@CreateDateColumn({type: "timestamp", default: () => "CURRENT_TIMESTAMP(6)"})
createdAd: Date
@Column()
photo: string
@Column({unique: true})
slug: string
// properties
@OneToMany(() => Property, (property) => property.product, {onDelete: "CASCADE"})
properties: Property[]
// brand
@ManyToOne(() => Brand, (brand) => brand.products)
brand: Relation<Brand>
// model
@ManyToOne(() => Model, (model) => model.products)
model: Relation<Model>
// category
@ManyToOne(() => Category, (category) => category.products)
category: Relation<Category>
// photos
@OneToMany(() => ProductPhoto, (photo) => photo.product, {onDelete: "CASCADE"})
photos: ProductPhoto[]
// reviews
@OneToMany(() => Review, (review) => review.product, {onDelete: "CASCADE"})
reviews: Review[]
// rating
@OneToMany(() => Rating, (rating) => rating.product, {onDelete: "CASCADE"})
rating: Rating[]
// orders
@OneToMany(() => OrderItem, (orderItem) => orderItem.product, {onDelete: "SET NULL"})
orders: OrderItem[]
// color
@ManyToOne(() => ProductColor)
color: Relation<ProductColor>
get discountPrice(): number {
return this.sale > 0 ? this.priceUAN - (this.priceUAN / this.sale) : this.priceUAN
}
}
querybuilder:
const queryBuilder = await this.productRepository.createQueryBuilder('product')
.leftJoinAndSelect('product.category', 'category')
.leftJoinAndSelect('product.brand', 'brand')
.leftJoinAndSelect('product.properties', 'properties')
.leftJoinAndSelect('product.model', 'model')
.leftJoinAndSelect('product.color', 'color')
.addSelect('product.discountPrice', 'discountPrice')