Knex: est-il possible de créer une requête de jointure imbriquée?

Créé le 21 avr. 2016  ·  3Commentaires  ·  Source: knex/knex

Salut, Excellent travail de l'équipe Knexjs. J'essaye knexjs sur ORM avec un petit exemple ayant plusieurs à plusieurs relations. L'exemple concerne les auteurs et les livres où la table auhtors et la table book ont ​​une relation plusieurs à plusieurs via la table author_books. Je veux obtenir un livre particulier avec tous les auteurs. Vous trouverez ci-dessous une requête brute qui donne le résultat attendu. Mais je ne comprends pas comment créer cette requête à l'aide de Knexjs? Toute aide serait appréciée.

Remarque: j'utilise Knexjs avec javascript ES6.

Mettre en doute:-

SELECT  `book`.`id` ,  `book`.`title` ,  `authors`.`id` AS  `authors.id` ,  `authors`.`name`
AS  `authors.authorname` ,  `authors.author_books`.`book_id` 
AS  `authors.author_books.bookId` , `authors.author_books`.`author_id` 
AS  `authors.author_books.author_id` 
FROM  `books` AS  `book` 
LEFT OUTER JOIN (
 `author_books` AS  `authors.author_books` 
INNER JOIN  `authors` AS  `authors` ON  `authors`.`id` =  `authors.author_books`.`author_id`
) ON  `book`.`id` =  `authors.author_books`.`book_id` 
WHERE  `book`.`id` =1

c'est la requête que j'essaye de construire en utilisant Knexjs.

this.Knex('books as book')
.leftOuterJoin('author_books as authors.author_books', function(){
  // How could I nest INNER JOIN in LEFT OUTER JOIN

  this.on('book.id', 'authors.author_books.book_id')
}).select('book.id', 'book.title', 'authors.id as authors.id'
  , 'authors.name as authors.name', 'authors.author_books.book_id as authors.author_books.book_id'
  , 'authors.author_books.author_id as authors.auhtor_books.author_id')
.where('book.id', id)

S'il vous plaît laissez-moi savoir si je me trompe quelque part?

question

Commentaire le plus utile

La question est de savoir comment imbriquer des requêtes de jointure à l'aide de knexjs? Jointure intérieure imbriquée avec jointure gauche ou droite en utilisant knex, afin que knex puisse créer une requête SQL comme indiqué ci-dessus dans la section Requête:?

Tous les 3 commentaires

La question est de savoir comment imbriquer des requêtes de jointure à l'aide de knexjs? Jointure intérieure imbriquée avec jointure gauche ou droite en utilisant knex, afin que knex puisse créer une requête SQL comme indiqué ci-dessus dans la section Requête:?

@saurabhghewari avez-vous déjà trouvé une solution à cette question? J'essaye de faire quelque chose de similaire.

Je dois dire que je ne suis pas sûr si knex prend en charge les jointures imbriquées ... Je n'ai vu aucun test ou documentation pour ce cas, donc je suis presque sûr qu'ils ne sont pas pris en charge. Veuillez ajouter une demande de fonctionnalité pour cela.

Cette page vous a été utile?
0 / 5 - 0 notes