Knex: é possível construir uma consulta de junção aninhada?

Criado em 21 abr. 2016  ·  3Comentários  ·  Fonte: knex/knex

Olá, excelente trabalho da equipe Knexjs. Estou testando knexjs sobre ORM com um pequeno exemplo tendo muitos para muitos relacionamento. O exemplo é de autores e livros, em que a tabela de autores e a tabela de livros têm muitos para muitos relacionamentos por meio da tabela author_books. Quero obter um livro específico com todos os autores. Abaixo está a consulta bruta que dá o resultado esperado. Mas não estou conseguindo como construir essa consulta usando Knexjs? Qualquer ajuda seria apreciada.

Observação: estou usando Knexjs com javascript ES6.

Inquerir:-

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

esta é a consulta que estou tentando construir usando 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)

Por favor, deixe-me saber se estou errado em algum lugar?

question

Comentários muito úteis

A questão é como aninhar consultas de junção usando knexjs? Inner Join aninhado com Left ou Right JOIN usando knex, para que o knex possa construir uma consulta SQL como mostrado acima na seção Query:?

Todos 3 comentários

A questão é como aninhar consultas de junção usando knexjs? Inner Join aninhado com Left ou Right JOIN usando knex, para que o knex possa construir uma consulta SQL como mostrado acima na seção Query:?

@saurabhghewari você já encontrou uma solução para essa questão? Estou tentando fazer algo semelhante.

Devo dizer que não tenho certeza se o knex oferece suporte a junções aninhadas ... Não vi nenhum teste ou documentação para esse caso, então tenho certeza de que eles não são suportados. Por favor, adicione solicitação de recurso para isso.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

marianomerlo picture marianomerlo  ·  3Comentários

koskimas picture koskimas  ·  3Comentários

ghost picture ghost  ·  3Comentários

mtom55 picture mtom55  ·  3Comentários

fsebbah picture fsebbah  ·  3Comentários