• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

시퀄라이즈 through 테이블 질문드립니다.

20.11.02 00:08 작성 조회수 413

0

안녕하세요. 강의를 보며 이것저것 만들어 보는 중에 DB에 대한 이해가 부족해서 질문을 드립니다

강의에서 유저와 유저 사이의 팔로우 관계를 통해 Follow라는 through 테이블이 만들어졌고 구조가 이런식인데요

FollowingId     FollowerId

           1                    2

이 Follow 테이블을 임의로 정의할 때,

FollowingId     FollowerId     Following     Follower

           1                    2               멍멍이          야옹이

이런식으로 FollowingId와 FollowerId에 해당하는 유저의 닉네임을 Follow 테이블의 컬럼으로 가져올 수 있는 방법이 있는지 궁금합니다.ㅜㅜ

감사합니다.

답변 8

·

답변을 작성해보세요.

0

김동현님의 프로필

김동현

질문자

2020.11.02

그게 문제였네요ㅜㅜ

through 테이블이라 자동으로 엮일 줄 알고 제가 associate를 간과했던 것 같습니다 제로초님

귀한 시간 내주셔서 정말정말 죄송하고 감사드립니다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

0

네 Follow.associate에 User가 없어서 에러나는 것입니다.

Follow에서 User를 include하는 경우에는 Follow.associate에 User가 들어있어야 합니다.

User에서 Follow를 include한다면 User.associate에 Follow가 들어있어야 하고요.

0

김동현님의 프로필

김동현

질문자

2020.11.02

User모델에서 이렇게 설정했는데도 왜 그렇게 뜰까요?ㅜㅜ

이건 Follow.js 모델입니다.

요건 Group.js입니다.

설계가 잘못되었을까요??ㅠㅠㅠ

0

User.belongsToMany(User, { through: Follow, as: ..., foreignKey: ... })를 안 하신 것 아닌가요? Follow 모델이 User와 연결되지 않았다고 뜨네요.

또한 Follow 모델에서도

Follow.belongsTo(User, { as: 'Follower', foreignKey: 'FollowerId' });
Follow.belongsTo(User, { as: 'Following', foreignKey: 'FollowingId' });

가 되어있어야 합니다.

사실 지금 Group과 Follow와 User 관계가 매우 이상합니다. Follow관계에 Group이 껴있어야 하는 이유가 없지 않나요?

어떤 사람이 저와 가족 관계라면 그냥 Group에만 가족에만 표시해두면 됩니다. id: 5, relationship: 'family' 이런 식으로요. 꼭 그게 follow 관계와 엮어있어야하는지 모르겠네요. 설령 Group을 팔로워/팔로잉 관계가 맺어진 사람만 지정할 수 있다고 하더라도요.

Group 모델은 어떤 식으로 구성되어있는지 보여주세요.

0

김동현님의 프로필

김동현

질문자

2020.11.02

먼저 유저 정보를 가져오는 GET /user입니다.

다음은 Follow 테이블의 구조입니다.

다음과 같은 에러가 발생합니다. ㅠㅠ

0

include해서 Follow를 가져온 다음에 다시 include로 User를 하면 됩니다.

현재 include를 어떻게 하고 있는지 보여주세요.

0

김동현님의 프로필

김동현

질문자

2020.11.02

음 제가 강의를 보며 개인 프로젝트를 만들어 보고 있는 중인데... 제가 팔로우 중인 유저들을 친구, 가족, 동료 등 나만의 그룹으로 묶으려고 합니다.

제가 생각한 것은, 먼저 Group이라는 모델을 만든 후에

User와 Group을 User.hasMany(Group) 관계로 맺어주고,

유저 간의 팔로우를 나타내는 Follow 모델을 Group 모델에 속하도록 Group.hasMany(Follow) 관계로 했습니다.

이렇게 하니 Group모델에서 include를 통해 Follow 테이블은 가져올 수 있는데, FollowingId에 해당하는 유저의 닉네임은 가져올 수가 없어서요..ㅠㅠㅠ

제가 잘못 설계한 것인지 궁금합니다

0

include를 하면 되는데 꼭 테이블 안의 컬럼으로 만드셔야 하나요?