postgresql TypeORM queryBuilder:orderBy关系计数

xa9qqrwz  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(163)

我有一个基本的查询来检索course实体,这些实体与student有一个manyToMany关系,作为registered_students。我还想Map一个students_count属性,我设法通过loadRelationCountAndMap实现。
我不明白的是如何orderBy那个不是course实体的列的students_count值:

return await this.courseRepository
      .createQueryBuilder('course')
      .where('course.teacherId = :teacherId', { teacherId: teacher.id })
      .leftJoin('course.registered_students', 'student')
      .addSelect('student.firstName')
      .addSelect('student.lastName')
      .loadRelationCountAndMap(
        'course.students_count',
        'course.registered_students',
        'students_count',
      )
      .getMany();

字符串
我知道我不能简单地添加一些.orderBy('course.students_count', 'DESC'),因为它不引用列,但我找不到一个简单的方法,即使它看起来微不足道。

kxeu7u2r

kxeu7u2r1#

这个问题出现在我身上,我的第一个解决方案是这样的,附加到queryBuilder调用return语句:

.then(
([entities,count]) => {
entities.sort(yourSortFunctionHere);
return entities;
})

字符串
一个简单的内存排序。不漂亮,但提供了所需的功能。
也可以在queryBuilder中使用:

.addSelect('CAST(COUNT(student.id) AS INT)', 'studentcount');


并确保'studentcount'是传入.orderBy调用的字符串值。您还需要为课程的学生ID添加索引,否则查询将非常慢。

相关问题