Knex: ์ค‘์ฒฉ ๋œ ์กฐ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2016๋…„ 04์›” 21์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: knex/knex

์•ˆ๋…•ํ•˜์„ธ์š”, Knexjs ํŒ€์˜ ํ›Œ๋ฅญํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ํ•˜๋‚˜์˜ ์ž‘์€ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ORM์„ ํ†ตํ•ด knexjs๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ๋Š” Authors and Books์˜ ๊ฒฝ์šฐ auhtors ํ…Œ์ด๋ธ”๊ณผ book ํ…Œ์ด๋ธ”์€ author_books ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ๋‹ค ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ชจ๋“  ์ €์ž์™€ ํ•จ๊ป˜ ํŠน์ • ์ฑ…์„ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์˜ˆ์ƒ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›์‹œ ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Knexjs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๊นŒ? ์–ด๋–ค ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ์ €๋Š” ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ES6๊ณผ ํ•จ๊ป˜ 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)

๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”?

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ฌธ์ œ๋Š” knexjs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ค‘์ฒฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. knex๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Left ๋˜๋Š” Right JOIN์œผ๋กœ ์ค‘์ฒฉ ๋œ ๋‚ด๋ถ€ ์กฐ์ธ, ๊ทธ๋Ÿฌ๋ฉด knex๊ฐ€ ์œ„์˜ Query : ์„น์…˜์— ํ‘œ์‹œ๋œ๋Œ€๋กœ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

๋ฌธ์ œ๋Š” knexjs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ค‘์ฒฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. knex๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Left ๋˜๋Š” Right JOIN์œผ๋กœ ์ค‘์ฒฉ ๋œ ๋‚ด๋ถ€ ์กฐ์ธ, ๊ทธ๋Ÿฌ๋ฉด knex๊ฐ€ ์œ„์˜ Query : ์„น์…˜์— ํ‘œ์‹œ๋œ๋Œ€๋กœ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@saurabhghewari ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ๋น„์Šทํ•œ ์ผ์„ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

knex๊ฐ€ ์ค‘์ฒฉ ์กฐ์ธ์„ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค๊ณ  ๋งํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.์ด ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ๋‚˜ ๋ฌธ์„œ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰