TypeORM:按多列排序
在 TypeORM 中,您可以按多列对结果进行排序。下面的 2 个示例向您展示了如何做到这一点。第一个示例使用find() 方法,而第二个示例使用查询构建器。在这两个示例中,我们将使用名为Product的实体:
// KindaCode.com
// Product entity
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column({ default: 0 })
price: number;
@Column({ default: 0 })
shippingFee: number;
@Column({ default: new Date() })
yearOfManufacture: Date;
}
使用 find() 方法
这首先按价格(升序)对我们的产品进行排序,然后按shippingFee(升序),然后按yearOfManufacture(降序)对我们的产品进行排序。重要的是要知道,按运费排序只会发生在相同价格的产品之间。仅在价格和运费相同的产品之间才会按制造年份排序。
const productRepository = myDataSource.getRepository(Product);
const products = await productRepository.find({
where: {
/* conditons, if any */
},
// sort by multiple columns
order: {
price: 'ASC',
shippingFee: 'ASC',
yearOfManufacture: 'DESC',
},
});
console.log(products);
使用查询生成器
下面的代码片段与第一个示例执行相同的操作,但方式不同:
const productRepository = myDataSource.getRepository(Product);
const products = await productRepository
.createQueryBuilder('product')
.select()
.orderBy('product.price', 'ASC')
.addOrderBy('product.shippingFee', 'ASC')
.addOrderBy('product.yearOfManufacture', 'DESC')
.getMany();
console.log(products);
对于每个附加的排序条件,您必须在查询构建器链中添加一个addOrderBy 。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。