[Dimelo Project] DATE_FORMAT 정렬 (TypeOrm querybuilder)

Suyeon Pi·2022년 2월 24일
0

Dimelo

목록 보기
12/22
post-custom-banner

orderBy를 이용해 글이 생성 순서대로 정렬되길 원했다. 하지만 날짜 반환은 초단위는 제외한 년,월,일만 반환하고 싶었다.
처음에는 년,월,일만 반환해도 orderBy했을때 시간까지 순서대로 정렬이 될줄 알았지만, 시간까지 반환해야지 시간순서대로 정렬이 되었다.

그래서 시간까지 DATE_FORMAT에 추가하고 마지막에 데이터를 리턴할 때 map으로 시간을 제외하고 반환 하기로 하였다.

변경 후 코드:

  const results = await query
      .innerJoin('project.User', 'user')
      .innerJoin(Skill, 'skill', 'skill.projectId = project.id')
      .leftJoin(Position, 'position', 'position.projectId = project.id')
      .leftJoin(Comment, 'comment', 'comment.projectId = project.id')
      .select([
        'project.id',
        'project.title',
        'project.content',
        'project.ongoing',
        'project.participant',
        `DATE_FORMAT(project.createdAt, '%Y.%m.%d %r') AS project_createdAt`, 
        // DATE_FORMAT (%r: 24시기준 시간)
        'user.nickname',
        'IFNULL(comment.num_comment, 0) AS num_comment',
        'skill.skills AS project_skill',
        'position.positions AS project_position',
      ])
      .groupBy('project.id')
      .orderBy('project_createdAt', 'DESC')
      .limit(perPage)
      .offset(perPage * (page - 1))
      .getRawMany();

   return results.map((result) => {
      return {
        ...result,
        project_createdAt: result.project_createdAt.split(' ')[0].toString(),
      };
    });

createAt에서 split을 이용해 시간부분을 잘라서 리턴해주었다.

profile
Stay hungry, Stay foolish!
post-custom-banner

0개의 댓글