如何在 TypeORM 中使用子查询
本文是关于在 TypeORM 中使用带有查询构建器的子查询。假设我们有一个名为Product的实体:
// KindaCode.com - Example
// Product entity
import {
Entity,
PrimaryGeneratedColumn,
Column,
} from 'typeorm';
@Entity({name: 'products'})
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column({default: 0})
price: number
}
下面的代码片段通过使用子查询(在查询构建器链中以subQuery() 方法开始并以getQuery() 方法结束)来查找价格高于平均价格的产品:
const productRepository = myDataSource.getRepository(Product);
const myQueryBuilder = productRepository.createQueryBuilder('product');
// Fetch products with price greater than average price
const products = await myQueryBuilder
.select()
.where(
`product.price > ${myQueryBuilder
.subQuery()
.select('AVG(price)')
.from(Product, 'product')
.getQuery()}`
)
.getMany();
console.log(products);
为了增加可读性,我们可以重写代码如下:
const productRepository = myDataSource.getRepository(Product);
const myQueryBuilder = productRepository.createQueryBuilder('product');
const subQuery = myQueryBuilder
.subQuery()
.select('AVG(product.price)', 'avgPrice')
.from(Product, 'product')
.getQuery();
// Fetch products with price greater than average price
const products = await myQueryBuilder
.select()
.where(`product.price > (${subQuery})`)
.getMany();
console.log(products);
上面的示例非常简单且平庸,但是从这里开始,您就可以开始了。请注意,在 TypeORM 中,您可以使用带有FROM、WHERE和JOIN的子查询。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。