我有一个基本查询来检索与
course
具有多对多关系的 student
实体,如 registered_students
。我还想映射一个 students_count
属性,我通过 loadRelationCountAndMap
成功实现了。
我不明白的是如何
orderBy
students_count
值不是 course
实体的列:
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')
,因为它不引用列,但我找不到一个简单的方法,即使它看起来微不足道......
这个问题已经出现在我面前,由于没有对此做出回应,我担心这是不可能的。 我的解决方法是,鉴于我的 QueryBuilder 调用返回一个承诺,请附加:
.then(
([entities,count]) => {
entities.sort(yourSortFunctionHere);
return entities;
})
一个简单的记忆排序。不漂亮,但提供了所需的功能。