NodeJS Typeorm:如何按一对多的日期排序

wtlkbnrh  于 2023-04-05  发布在  Node.js
关注(0)|答案(2)|浏览(154)

我有一个设备实体和一个相关的数据实体

设备实体

export class Devices extends BaseEntity{

    @PrimaryColumn()
    id_device: number;

    @Column("varchar", { length: 50 , default: "---"})
    name: string;

    @Column("varchar", { length: 50 , default: "---" })
    address: string;

    @Column({default: false})
    shared: boolean;

    @OneToMany(() => Data, data => data.id_data)
    Data: Data[];
}

数据实体

export class Data extends BaseEntity{

    @PrimaryGeneratedColumn()
    id_data: number;

    @Column()
    temperature: number;

    @Column({nullable: true})
    id_device: number;

    @CreateDateColumn()
    time;

    @ManyToOne(()=>Devices, devices => devices.id_device,{
        onDelete: 'CASCADE',
        onUpdate: 'CASCADE'
    })
    @JoinColumn({name: "id_device"})
    devices: Devices;

}

我想获取所有最新的设备已将其共享设置为true的数据条目。
如何使用QueryBuilder完成此操作?

nhaq1z21

nhaq1z211#

如果设备可以有许多数据条目,并且数据可以有许多设备,则应该是ManyToMany关系。
下面是查询生成器的方法:

const data = await this.createQueryBuilder("data")
    .leftJoin("data.devices", "device")
    .where("device.shared = :sharedDevice", { sharedDevice: true })
    .orderBy("time", "DESC")
    .getMany()
a64a0gku

a64a0gku2#

以下是如何在不使用查询生成器的情况下完成此操作的方法。

const dataRepository = AppDataSource.getRepository(Data);

const dataItems = dataRepository.find({
  where: {
    device: {
      sharedDevice: true
    }
  },
  relations: {
    devices: true
  }
  data: {
    time: "DESC"
  }
})

相关问题