Order Bookshelf.js fetch par valeur de colonne associée

J’utilise Bookshelf.js / Knex.js pour récupérer un modèle (appelez-le utilisateur) avec un modèle enfant associé (appelez-le société).
Puis-je commander par un champ du modèle enfant – company.name ?

En outre, si cela est possible, puis-je effectuer un sorting multiple, par exemple company.name décroissant puis lastName croissant

Voici mon code actuel, qui ne fonctionne que sur les champs du modèle racine. qb.orderBy('company.name', 'desc') ne fonctionne pas.

 users.query(function(qb) { qb.orderBy('lastName', 'asc'); }) .fetch({withRelated: ['company']}) .then(success, error); 

Essayez ce qui suit:

 users .fetch({withRelated: [ { 'company': function(qb) { qb.orderBy("name"); } } ]}) .then(success, error); 

J’ai eu l’idée de https://github.com/tgriesser/bookshelf/issues/361

Vous pouvez le faire comme ceci sans avoir besoin d’une fonction:

 users.query(function(qb) { qb.query('orderBy', 'lastName', 'asc'); }) .fetch({withRelated: ['company']}) .then(success, error); 

Trouvé ici: Trier les résultats de Bookshelf.js avec .orderBy ()

Je pense que je l’ai résolu en faisant ceci:

 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 }, ); 

Je modifie la requête en joignant les tables souhaitées et après le sorting (à l’aide de orderByRaw, car il me faudra append d’autres sortings que j’estime impossible avec orderBy). Je groupe par identifiant de l’article pour supprimer les doublons. Le seul problème est qu’il n’est pas défini quel nom d’ acteur (sur plusieurs possibles) est utilisé pour le sorting.