こんにちは、Knexjsチームによる素晴らしい仕事です。 私は多対多の関係を持つ1つの小さな例でORMを介してknexjsを試しています。 例は、auhtorsテーブルとbookテーブルがauthor_booksテーブルを介して多対多の関係にあるAuthors andBooksの例です。 すべての著者と一緒に特定の本を手に入れたいです。 以下は、期待される結果を与える生のクエリです。 しかし、Knexjsを使用してこのクエリを作成する方法がわかりませんか? どんな助けでもいただければ幸いです。
注:私はjavascriptES6でKnexjsを使用しています。
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
これは、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)
私がどこか間違っているかどうか教えてください。
問題は、knexjsを使用して結合クエリをネストする方法です。 knexを使用してLeftまたはRightJOINでネストされた内部結合。これにより、knexは上記のQuery:セクションに示すようにSQLクエリを作成できます。
@saurabhghewariこの質問の解決策を見つけたことがありますか? 私は似たようなことをしようとしています。
knexがネストされた結合をサポートしているかどうかはわかりません...その場合のテストやドキュメントは見当たらなかったので、サポートされていないと確信しています。 このための機能リクエストを追加してください。
最も参考になるコメント
問題は、knexjsを使用して結合クエリをネストする方法です。 knexを使用してLeftまたはRightJOINでネストされた内部結合。これにより、knexは上記のQuery:セクションに示すようにSQLクエリを作成できます。