按相关列值排序Bookshelf.js的获取数据方法

4
我正在使用Bookshelf.js/Knex.js,获取一个带有关联子模型(称之为公司)的模型(称之为用户)。
我能否按照子模型的字段进行排序 - company.name 另外,如果可能的话,我可以进行多重排序,比如说按照 company.name 降序排列,然后按照 lastName 升序排列吗?
这是我的当前代码,它只适用于根模型字段。 qb.orderBy('company.name', 'desc')不起作用。
users.query(function(qb) {
  qb.orderBy('lastName', 'asc');
})
.fetch({withRelated: ['company']})
.then(success, error);

你解决过这个问题吗? - Jadam
3个回答

2

1

0

我认为我通过这样做解决了它:

let postHits =
    await posts
        .query(qb => qb
            .innerJoin('post_actor_rel', function () {
                this.on('post.id', '=', 'post_actor_rel.post_id');
            })
            .innerJoin('actor', function () {
                this.on('post_actor_rel.actor_id', '=', 'actor.id');
            })
            .orderByRaw('actor.name ASC')
            .groupBy('id')
        )
        .fetchPage({
            withRelated: ['roles', 'themes', 'activity_types', 'subjects', 'educational_stages', 'images', 'documents', 'actors'],
            limit,
            offset
        },
    );

我通过与所需表格进行内部连接来修改查询,并在排序后(使用 orderByRaw,因为我需要添加一些似乎无法通过 orderBy 实现的排序)按 post 的 id 进行分组,以消除重复行。唯一的问题是未定义用于排序的 actor 名称(可能有多个)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接