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 。

免责声明:
1.本站所有内容由本站原创、网络转载、消息撰写、网友投稿等几部分组成。
2.本站原创文字内容若未经特别声明,则遵循协议CC3.0共享协议,转载请务必注明原文链接。
3.本站部分来源于网络转载的文章信息是出于传递更多信息之目的,不意味着赞同其观点。
4.本站所有源码与软件均为原作者提供,仅供学习和研究使用。
5.如您对本网站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。
火焰兔 » TypeORM:按多列排序