🎃

TypeORMでattributeを指定して階層構造データを取得する

2021/04/25に公開

目的

SELECT u.id, u.name, p.name
FROM users u
INNER JOIN posts p
ON u.id = p.user_id
WHERE p.id = 1;

というsqlを発行して、JS実行時に以下のようなオブジェクトを取得したい。

{
  id: 1,
  name: 'Yamada Taro',
  posts: [
    { name: '記事1' },
  ],
}

Partial Selection

https://github.com/typeorm/typeorm/blob/master/docs/select-query-builder.md#partial-selection

import {getRepository} from "typeorm";

const user = await getRepository(User)
    .createQueryBuilder('user')
    .select([
      'user.id',
      'user.name',
      'post.name',
    ])
    .innerJoinAndSelect('posts', 'post')
    .where('post.id = :id', { id: 1 })
    .getOne();

によって、attributeを指定しつつ階層構造を保持したobjectを取得できる。

Discussion