20210925 (42Sof 특정 게시글 조회)
1. 전체 학습시간
오후 09:00 ~ 오후 11:00
2. 학습 목표
42StackOverFlow 기능 구현 및 특정 게시글 페이지가 어떤 데이터가 필요하고 어떻게 구현할지 생각하기
3. 학습 방법
하인호랑 디스코드로 대화
4. 다음 학습 목표
질문 페이징 기능 추가
5. 상세 학습 내용
REST API 문서 수정 및 질문 게시글 조회할 때 필요한 데이터를 가져오는 방법에 대해 고민
특정 질문 게시글 조회하기
서버에서 가져와야 할 데이터들
- 질문 게시글 (Question Table)
- 질문 게시글에 달린 해시테그 (리스트) (Answer Table)
- 질문 게시글에 달린 댓글 (리스트) (Comment Table)
- 질문 게시글을 답변하는 답변 게시글 (리스트) (Answer Table)
- 질문 게시글을 작성한 사람의 이메일 (User Table)
- 답변 게시글에 달린 댓글 (Comment Table)
- 답변 게시글을 작성한 사람의 이메일 (User Table)
DB에서 가져오는 방법
JOIN 사용
JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현
조인 방법 예시
Mysql
SELECT *
FROM Markdown.questions Q
INNER JOIN Markdown.users U
ON U.id = Q.userId
INNER JOIN Markdown.questions_hash_tag_hashtag QH
ON QH.questionsId = Q.id
INNER JOIN Markdown.hashtag H
ON H.id = QH.hashtagId
WHERE Q.id = 1
TypeOrm JOIN 방법
const getQuestionDetailPage = async (questionId) => {
const queryRunner = await getQueryRunner();
const queryBuilder = queryRunner.manager
.getRepository(Question)
.createQueryBuilder('question')
.where('question.id = :questionId', { questionId })
.innerJoinAndSelect('question.user', 'user')
.innerJoinAndSelect('question.hashTag', 'hashTag')
.leftJoinAndSelect('question.comment', 'comment')
const questionInfo = await queryBuilder
.disableEscaping()
.getMany();
const queryBuilder2 = queryRunner.manager
.getRepository(Answer)
.createQueryBuilder('answer')
.where('answer.questionId = :questionId', { questionId })
.innerJoinAndSelect('answer.user', 'user')
.leftJoinAndSelect('answer.comment', 'comment')
const answerInfo = await queryBuilder2
.disableEscaping()
.getMany();
return {
questionInfo: questionInfo,
answerInfo: answerInfo
}
}
Author And Source
이 문제에 관하여(20210925 (42Sof 특정 게시글 조회)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@earthkingman/20210925저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)