0320 ํ๋ก์ ํธ ์ค (์ฝ๊ฐ ์์ ์์ ~_ใ )
์ ๋ฒ ๊ธ์์ ๊ฐ๋ตํ๊ฒ ํ ์ด๋ธ ์์ฑ๊น์ง ํด๋ดค์๊ณ ์ด์ ์ธ๋ ํค๋ ํ์ฉํด๋ณด๋ ค๊ณ ํ๋ค..!!
DB๋ฅผ ์จ๋ดค๋ค๋ฉด ์ ์๊ฒ ์ง๋ง, SQL์ ์ด์ง๋ง ์จ๋ดค๋ ๋๋ ์ต์ํ์ง ์์๋ค. ..ใ ใ
foreign key (์ธ๋ ํค) ๋?
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ๋ ํค๋ ํ ํ ์ด๋ธ์ ํ๋ ์ค ๋ค๋ฅธ ํ ์ด๋ธ์ ํ์ ์๋ณํ ์ ์๋ ํค๋ก,
Supabase์์ foreign key๋ ๋ ํ ์ด๋ธ ๊ฐ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ฐ์ด๋ฉฐ, ์ด foreign key๋ก ์ฐ๊ฒฐ๋ ๋ ํ ์ด๋ธ์์ ํ ํ ์ด๋ธ์ ํ์ด ๋ค๋ฅธ ํ ์ด๋ธ์ ํ์ ์ฐธ์กฐํ๋ค.
๋ ํ ์ด๋ธ์ ์ธ๋ ํค๋ฅผ ํตํด join๋ ์ ์๋ค.
(A foreign key is a field in one table that uniquely identifies a row of another table.)
(In Supabase, foreign keys are used to establish a link between two tables, creating a relationship where one table's row references another.)
(Tables can be "joined" together using Foreign Keys.)
์๋์ฝ๋๊ฐ ์ธ๋ํคํ์ฉํด communityPosts ํ ์ด๋ธ์์๋, communityComments ํ ์ด๋ธ์์๋ ์๋ฃ๋ฅผ ๊ฐ์ ธ์จ ๊ฒ!
postId ์ธ๋ํค๋ก ์ฐ๊ฒฐ๋์ด์, postId ํ๋์ ํด๋นํ๋ ํ ๋ชจ๋ * ๋ฅผ communityPosts ์์ ๊ฐ์ ธ์ค๊ณ ,
์ด ๋์ผํ postId ํ๋์ ๊ฐ์ ๊ฐ์ง communityComments ํ ์ด๋ธ์ ํ๋ค์ ๋ชจ๋ * ๊ฐ์ ธ์์ comments ๋ผ๊ณ ์ด๋ฆ ๋ถ์ฌ์ค๋ค.
const CommunityDetailPage = async ({ params }: { params: { id: string } }) => {
const postId = params.id;
const supabase = createClient();
// * ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๋ ํจ์๋ฅผ ๋ฐ๋ก hook ์ฒ๋ผ ๋บผ ์ง
// ๊ฒ์๊ธ๊ณผ ํด๋น ๊ฒ์๊ธ ๋๊ธ๋ค ๊ฐ์ ธ์ค๊ธฐ
const fetchPost = async () => {
// : Promise<communityPosts> ํ์
์ธ๋ํค comment ๊น์ง ๋ค์ ์์ฑํด์ผ
try {
const { data: posts, error } = await supabase
.from('communityPosts')
.select('*, comments:communityComments(*)')
.eq('postId', postId);
if (error) throw error;
return posts![0];
} catch (error) {
console.error();
throw error;
}
};