[Sequelize] Joinํ•˜๊ธฐ

[์›๋ณธ ๋งํฌ]

์‹œํ€„๋ผ์ด์ฆˆ์˜ ORM ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด JOIN ๋“ฑ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ…Œ์ด๋ธ”์€ ์ด๋ ‡๋‹ค.

ํฌ์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Post์™€, ๊ทธ ํฌ์ŠคํŠธ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€์„ ํ‘œํ˜„ํ•˜๋Š” ๋ชจ๋ธ Comment๋‹ค.
Comment๋Š” ์™ธ๋ž˜ํ‚ค postId๋กœ Post์˜ Id๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜์˜ ํฌ์ŠคํŠธ์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋Œ“๊ธ€์ด ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 1:N ๊ด€๊ณ„๋‹ค.
๊ทธ๋Ÿฌ๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์ด hasMany๋กœ ๊ด€๊ณ„๋ฅผ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ด์™ธ์—๋„ ๊ด€๊ณ„ ์„ค์ • ๋ฉ”์„œ๋“œ์—” hasOne, belongtoTo, belongtoToMany ๋“ฑ์ด ์žˆ๋Š”๋ฐ
hasOne์€ 1:1์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ณ ,
belongsTo๋Š” ๋ฐ˜๋Œ€๋กœ ์ฐธ์กฐ๋˜๋Š” ์ž…์žฅ์—์„œ ์†Œ์†๋˜๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•œ๋‹ค. ๊ฐ€๋ น ์œ„์˜ ๊ฒฝ์šฐ์—” Comment.belongsTo(Post)๋กœ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  belongsToMany๋Š” N:M ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์“ฐ๋Š”๋ฐ.. ์“ธ์ผ์ด ์ž์ฃผ ์žˆ์„์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฐ์ดํ„ฐ๋Š” ๋Œ€์ถฉ ์ด๋ ‡๊ฒŒ ๋„ฃ์–ด๋†จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์กฐ์ธ์„ ํ•˜๋ ค๋ฉด ๊ทธ์— find ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ include ์˜ต์…˜์„ ๋„ฃ์–ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค!

ํ•˜๋‚˜๋ฉด ๊ทธ๋ƒฅ ์˜ค๋ธŒ์ ํŠธ ํ•˜๋‚˜๋งŒ ๋„ฃ์–ด์ค˜๋„ ๋˜์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค.
model์€ ๋ง ๊ทธ๋Œ€๋กœ ์กฐ์ธ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ๋ชจ๋ธ, attributes๋Š” ์กฐ์ธํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ๊ฐ’๋“ค์ด๋‹ค. attribute์— ๋ฐฐ์—ด์„ ๋‹ค์‹œ ๋„ฃ๋Š”๊ฑด as๋กœ ์ปฌ๋Ÿผ๋ช…์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๊ณ ...
๊ทธ๋ ‡๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ์งœ๋‘๋ฉด Post์˜ ์ปฌ๋Ÿผ์€ ๊ทธ๋ƒฅ ์ž˜ ๋“ค์–ด์˜ฌ ๊ฒƒ์ด๊ณ ,
Comment๋Š” hasMany๋กœ ๊ด€๊ณ„๋ฅผ ๊น”์•„๋’€์œผ๋‹ˆ ๋ฐฐ์—ด๋กœ ๋“ค์–ด์˜ฌ ๊ฒƒ์ด๋‹ค.
์ฟผ๋ฆฌ์—์„œ ๋ฐ”๋กœ ๊ทธ๋ฃน์„ ๊ฑธ์ง„ ์•Š์ง€๋งŒ ์‹œํ€„๋ผ์ด์ฆˆ ์•ˆ์—์„œ ์ž˜ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ์ฐ์–ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
์™œ์ธ์ง„ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๊ฐ€๋” ๊ทธ๋ƒฅ ํ•„๋“œ์ ‘๊ทผ์œผ๋กœ ์•ˆ๋  ๋•Œ๊ฐ€ ์žˆ์–ด์„œ, ๊ทธ๋Ÿด ๋•Œ๋Š” get ๋ฉ”์„œ๋“œ๋‚˜ dataValues ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.


๊ทธ๋ ‡๋‹ค.



์ฐธ์กฐ
https://sequelize.org/master/manual/assocs.html
https://velog.io/@cadenzah/sequelize-document-4