inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React로 NodeBird SNS 만들기

6-14. 게시글 좋아요, 좋아요 취소

질문이요

126

D_One

작성한 질문수 92

0

시퀄라이즈 association이 제가 이해한 개념이 맞는지 확인 부탁드려요. 

 post.js

db.Post.belongsToMany(db.User, { through'Like'as'Likers' }); 

user.js

db.User.belongsToMany(db.Post, { through'Like'as'Liked' });

Post 와 User는 N:M관계로 서로 이어주는 중간테이블 Like를 갖고 있다. 

그 Like 테이블 안에는, 기본적으로 Created_at, Updated_at 컬럼을 갖고있다.

그리고, 두개의 테이블의 아이디 PostId 와 UserId를 갖고있다.

post.js 에서 정의한 Liker는 UserId 를 뜻하고, 

user.js 에서 정의한 Liked는 PostId를 뜻한다. 

서로의 아이디를 가리키는 형국이다. 

Like 중간테이블에 값저장하기. 

const post = await db.Post.findOne({ where: { id: req.params.id }});
await post.addLiker(req.user.id);

post.addLiker(req.user.id); : 중간 테이블의 값을 넣어줌

Liker 이므로 UserId를 써주어야한다.

중간 테이블에는 , post 이부분에서 PostId 와 

req.user.id 이 부분에서 UserId가 채워진다. 

1. 지금 제가 맞게 이해한건가요? 

________________________________________

2.

[ Hashtag {

    dataValues:

     { id: 9,

       name: 'ww',

       updatedAt: 2019-10-19T07:11:33.896Z,

       createdAt: 2019-10-19T07:11:33.896Z },

    _previousDataValues:

     { name: 'ww',

       id: 9,

       createdAt: 2019-10-19T07:11:33.896Z,

       updatedAt: 2019-10-19T07:11:33.896Z },

    _changed:

     { name: false, id: false, createdAt: false, updatedAt: false },

    _modelOptions:

     { timestamps: true,

       validate: {},

       freezeTableName: false,

       underscored: false,

       paranoid: false,

       rejectOnEmpty: false,

       whereCollection: [Object],

       schema: null,

       schemaDelimiter: '',

       defaultScope: {},

       scopes: {},

       indexes: [],

       name: [Object],

       omitNull: false,

       charset: 'utf8mb4',

       collate: 'utf8mb4_general_ci',

       sequelize: [Sequelize],

       hooks: {} },

    _options:

     { isNewRecord: true,

       _schema: null,

       _schemaDelimiter: '',

       attributes: undefined,

       include: undefined,

       raw: undefined,

       silent: undefined },

    isNewRecord: false } ]

지금  윗 값이
result.map(r => r[0])

이거 인데요. 

await newPost.addHashtags(result.map(r => r[0]));

Hashtags 이니 아이디들 들어간 배열을 수용할 수있는건 알겠는데요..

newPost.addHashtags( ) 이 괄호안  부분에 id 들어있는 객체(윗 값처럼 여러개 섞였어도..)만 있으면, 자기가 알아서 id 만 골라서 갖고 가는건가요?? 

_________________________________________

3.

1:N 관계에서요 

post 와 image는 1:N 관계이잖아요

db.Image.belongsTo(db.Post);

Image가 post에게 belongsTo (===속함) 하니까,

Image 테이블에 postId라는 post를 가르키는 컬럼이 생기는걸 알 수 있는데요. 

add 함수 쓸때요, 

          if (Array.isArray(req.body.image)) {
            const images = await Promise.all(req.body.image.map((image=> {
              return db.Image.create({ srcimage });
            }));
            await newPost.addImages(images);

이렇게 되어 있던데요, 

newPost.addImages(images)

에서 도대체 괄호 안에 무엇을 써주어야 할지 헷갈리네요?

newPost 는 테이블이고 

Images 도 테이블인데, 

괄호안에, postId 값을 넣어줘야한게 아닌가요?

괄호에 무엇이 들어 가야하는지 헷갈리네요. 

1번과 다르게 

괄호 안에, 중간테이블의 Liker (UserId를 가르키는 ) 채우기 위해 req.user.id 넣어 주었는데요.. 

post.addLiker(req.user.id); : 중간 테이블의 값을 넣어줌

Liker 이므로 UserId를 써주어야한다.

중간 테이블에는 , post 이부분에서 PostId 와 

req.user.id 이 부분에서 UserId가 채워진다. 

여기에서도 의문인게, 

A.addB(___) 이면, A와 B 둘다 DB 테이블이여야한는데

Liker는 테이블이 아니지 않나요.. ???

아니면, 다대다 할때만, as를 이용해서 user 테이블을 Liker라 이름 붙이고 또 동시에, UserId라는 표현으로   해주는건가요?

___________________________________________

4. 

관계를 지으면 id 부분이 와서 다른테이블을 가르키잖아요. id 대신에 따로 지정한 것이  오게 할 수 도 있나요?

___________________________________________

react javascript

답변 1

0

제로초(조현영)

1. 넵. createdAt, updatedAt으로 camelCase입니다. 다대다 관계도 맞게 이해하셨습니다.

2. id를 직접 넣어주거나, 저렇게 다른 시퀄라이즈의 결과물을 넣으시면 됩니다.

3. 2번에서 답했듯, id를 직접 넣어주거나 다른 시퀄라이즈의 결과물을 넣으면 되기 때문에 images(이미지를 생성한 시퀄라이즈 결과물)을 넣은 것입니다.

Liker나 Liked도 테이블이라고 생각하시면 됩니다. as가 테이블의 별명이라고 생각하시고요.

4. 가능합니다. 다만 그 값이 고유한 key여야 합니다. id 대신에 다른걸 key로 지정할 수 있습니다.

next 10 이상에서는 redux dev tool 구동이 안되나요?

0

272

1

세션 갱신 문의 건

0

484

7

배포 진행 후 Highlight updates components render 표시

0

445

1

똑같은 기능을 하는 테이블

0

448

4

관계형

0

312

2

프론트 서버를 이용하지 않는경우

1

299

3

인피니트 스크롤링 사용시 오류

0

278

0

계속 이런에러가 떠서 해결하기는 했는데 어떤 의미인지 모르겠습니다.

0

434

2

req.user가 언제 생성되나요??

0

330

2

Cannot read property 'id' of null 에러

0

333

1

리트윗한 게시글 불러오는 sequelize

0

252

1

result.data에서 images인 이유

0

281

2

takeLatest에 대한 질문입니다.

1

342

2

프론트에서 express를 사용하지 않을때 동적라우팅

0

501

6

getInitialProps가 클라이언트에서 수행되는 이유?

0

258

1

리로드하면 팔로우 언팔로우 값이 초기화 되는 문제입니다.

0

445

2

스타일드 컴포넌트와 className을 통한 스타일 적용의 차이에 대해 궁금합니다

0

585

2

할인 쿠폰 사용이 안되는되요 (848-f9af83f183e3)

0

365

1

nodejs mvc 패턴

0

976

4

사용하고 보니, 람다 구성이 궁금합니다!

0

266

1

제로초님

0

445

1

새로고침 로그인 풀림 문제.

0

247

1

안녕하세요. 강의 너무 감사합니다

0

157

1

제로초님

0

170

1