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 。