์ง๋ ํฌ์คํ
์ ์ด ๊ฒ๊ณผ ๊ฐ์ด!
Association์ ์ด์ฉํ Join Table ๊ตฌํ์ ์๋ฃํ์๋ค!
Join Table์ ๊ตฌํํ๊ณ ์จ๋จน์ง ์๋ ๊ฑด ์ข ์์ฝ๊ธฐ๋ ํ๊ณ ...
๋ค์ํ Sequelize ๋ฉ์๋(?)๋ค์ ๋ ์ฌ์ฉํด๋ณด๊ณ ์ถ์ด์!!!
๋ณธ๊ฒฉ์ ์ค์ต์ ๋์ฐ๋ค!
์ฌ์ค ์ฒ์์๋ ํ
์คํธ ์ผ์ด์ค ํต๊ณผํ๋๋ฐ์๋ง ๊ธ๊ธํด์
์ง๊ธ ์์ฑํ๊ณ ์๋ ์ด ์ฝ๋๊ฐ ๋ญ ์ํ ๊ฑด์ง๋ ์ ๋๋ก ์๊ฐ์ ํด๋ณด์ง ์์๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์์ด์ ๋์ผ๋ก ํ์ธํ์ง ๋ชป ํ๋ ๋๋์ฑ ๋ง์ฐํ๊ฒ ์๊ฐํ๊ณ ...
์๊ฐ์ ํด๋ณด๋, ์ด๋ฒ ์คํ๋ฆฐํธ๋ฅผ ํตํด ๋ค๋ฃจ๊ณ ์๋ ๊ฑด ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ํตํ๋ ์๋ฒ์๋ค!
๊ทธ๋์ ์ฝ๋๋ฅผ ๋ค์ ธ ํฌํธ ๋ฒํธ๋ฅผ ์ฐพ์๋ค!
(์ฌ์ค ๊ทธ๋ฅ ์ ์ดํด๋์ค์๋ ์ ํ ์์์...)
๊ทธ๋์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํฌ์คํธ๋งจ์ ํตํด์ ๋ฐ์ดํฐ๋ค์ ๊ฒํ ํด๋ณด์๋ค.
์ด๋ ๊ฒ๋ ์ ์กฐํ๊ฐ ๋๋ค!
์ค์ Sequelize์ ์กฐ์ธํ
์ด๋ธ์ ์ด์ฉํ๋ ๋ฉ์๋๋ค์ ์ฌ์ฉํด๋ณด๊ณ ์ถ์๋ค...
๊ทธ๋ฆฌํ์ฌ ์ค์ค๋ก ๋ฏธ์
์ ๋ง๋ค์ด๋ณด์๋ค!
MISSION: url์ ์ ๋ ฅํ๋ฉด ํด๋น url์ user์ ์ด๋ฆ์ ๋ฐํํด์ฃผ์!
์ด๋ ๊ฒ ๋ผ์ฐํ ์ ์ถ๊ฐํด์ฃผ์๋ค!
๊ณต์๋ฌธ์๋ฅผ ์กฐ๊ธ ๋ค์ ธ๋ณด์๋๋! findAll๊ณผ where, ๊ทธ๋ฆฌ๊ณ include๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์์๋ค!
getUserName: async (req, res) => {
let result = await models.url.findAll({
where: { id: req.params.id },
include: [
{
model: models.user,
// ์ด๋ค ํ
์ด๋ธ๊ณผ ์กฐ์ธํ ๊ฒ์ธ์ง!
// ํนํ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ... user, users, "user", "users" ๋ชจ๋ ์๋...
// ์์ฑํ๊ณ ์๋ ์ฝ๋ ๊ธฐ์ค์ผ๋ก ์ ์ด์ค์ผ ํจ...
required: true,
// ํธ๋ฃจ -> ์ด๋์ชผ์ธ
// ํด์ค -> ๋ ํํธ ์์ฐํฐ ์ชผ์ธ!
attributes: ["name"],
// ์ด ๋ถ๋ถ์ด MySQL๋ก ๋ฐ์ง๋ฉด SELECT์ ํด๋นํ๋ ๋ถ๋ถ!
// ์ด๋ถ๋ถ์ด ์์ง ์กฐ๊ธ ํท๊ฐ๋ฆฌ๋๋ฐ...
},
],
});
console.log(result);
res.status(200).send(result[0].user.name);
},
์ด์ ๊ฐ์ด ์์ฑํด์ฃผ์๋ค!!!!
์ฌ์ค MySQL์์ ์กฐ์ธํ
์ด๋ธ ์ฐ๋ ๊ฒ๋ ๋ณต์กํ๋ฐ, ์ ๊ฑธ ์ด๋์ ๋ญ ์จ์ค์ผ ํ๋ ์ข ํท๊ฐ๋ ธ๋ค.
๊ทธ๋์ ์ฐ์ SQL query๋ฌธ์ ์์ฑํ์๋ค!!
SELECT user.name, url.id
FROM user
JOIN url
ON user.id = url.userId
WHERE url.id = params.id;
์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ดํด๋ณด๊ธฐ ์ํด ์ ์ ํ
์ด๋ธ๊ณผ
์ ์์ํ
์ด๋ธ์ ์ ๋ณด๋ฅผ ์กฐ๊ธ ๋ ์
๋ ฅํด์ฃผ์๋ค!
๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ธฐ์ ์์,
์ฌ์ค ๋ค ์์ฑํ๊ณ ๋ ์กฐ๊ธ ํท๊ฐ๋ ธ๋? ์ฌ์ค ์์ง๊น์ง๋ ํด๊ฒฐ๋ชปํ ๋ถ๋ถ์ด ๋ฐ๋ก attributes์ ๋ํ ๋ถ๋ถ์ด๋ค.
๋ด๊ฐ ์์ํ๊ธฐ์๋ ๋ฐ์์ result๋ง send๋ก ๋ณด๋ด์ฃผ์ด๋ attributes: ["name"]
์ด์ ๊ฐ์ด ์์ฑํ์ผ๋ ์ด๋ฆ๋ง ์ถ๋ ฅ๋ ๊ฑฐ๋ผ ์๊ฐํ์ผ๋, ๋ด ์์์ด ํ๋ ธ๋ค.
์ด์ ๊ฐ์ด name๋ถ๋ถ์ด url์ ๋ฌ๋ผ๋ถ์ด์ ์ถ๋ ฅ๋๋ค!!
์ด๊ฒ ์ฐพ์๋ณด๋ attributes๋ child ๋ชจ๋ธ์ ์ปฌ๋ผ์ ์
๋ ํ๋ ๊ฑฐ๋ผ๊ณ ํ๋ค...
๊ทธ๋์ attributes: ["name", "email"],
๊ณผ ๊ฐ์ด ์์ฑํ์๋๋...
์ด์ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค!
์์ฌ์ด๋๋ก ์ผ๋ํด์ฃผ๋ ๊ฐ์ res.status(200).send(result[0].user.name);
์ด์ ๊ฐ์ด ์กฐ๊ธ ์๋ด์ฃผ๋ฉด์ ์ค์ค๋ก ๋ง๋ ๋ฏธ์
์ ํด๋ฆฌ์ดํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์ด์ result์ ์ด๋ฆ๋ง ๋ด๊ธฐ๊ฒ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น๋ฅผ ๊ณ ๋ฏผํ์ง๋ง ์ด ๋ถ๋ถ์ ์์ง ํด๊ฒฐํ์ง ๋ชปํ๋ค... ๋ค์์ ๋ง์ ๊ณ ๋ฏผํด๋ณด๋ ๊ฒ์ผ๋ก ํ๋ฉฐ ํฌ์คํ ์ ๋ง์น๋ค...