前回
オブジェクトとそのリレーションのロード
PhotoとPhotoMetadataを一つのクエリで読み込みます。
src/index.ts
import { AppDataSource } from "./data-source"; import { Photo } from "./entity/Photo"; AppDataSource.initialize() .then(async () => { console.log("start..."); const photoRepository = AppDataSource.getRepository(Photo); const photos = await photoRepository.find({ relations: { metadata: true, }, }); console.log("photos", photos); }) .catch((error) => { console.log(error); });
実行すると、以下のようになります。
photos [ Photo { id: 6, name: 'my new photo...', description: 'my description...', filename: 'my photo name...', views: 0, isPublished: true, metadata: PhotoMetadata { id: 3, height: 777, width: 555, oriientation: 'portrait', compressed: true, comment: 'my comment...' } }, Photo { id: 7, name: 'my new photo...', description: 'my description...', filename: 'my photo name...', views: 0, isPublished: true, metadata: PhotoMetadata { id: 4, height: 777, width: 555, oriientation: 'portrait', compressed: true, comment: 'my comment...' } }, ...(省略)
findのオプション
findには色々なオプションがあります。
select
const photos = await photoRepository.find({ select: ["id", "name"], });
photos [ Photo { id: 2, name: 'my photo' }, Photo { id: 3, name: 'my photo' }, Photo { id: 4, name: 'my new photo...' }, Photo { id: 5, name: 'my new photo...' }, Photo { id: 6, name: 'my new photo...' }, Photo { id: 7, name: 'my new photo...' }
relations
const photos = await photoRepository.find({ relations: ["metadata"], });
Photo { id: 7, name: 'my new photo...', description: 'my description...', filename: 'my photo name...', views: 0, isPublished: true, metadata: PhotoMetadata { id: 4, height: 777, width: 555, oriientation: 'portrait', compressed: true, comment: 'my comment...' } }
where
const photos = await photoRepository.find({ where: { id: 7, }, });
photos [ Photo { id: 7, name: 'my new photo...', description: 'my description...', filename: 'my photo name...', views: 0, isPublished: true } ]
where and
const photos = await photoRepository.find({ where: { id: 7, views: 0, }, });
photos [ Photo { id: 7, name: 'my new photo...', description: 'my description...', filename: 'my photo name...', views: 0, isPublished: true } ]
where or
const photos = await photoRepository.find({ where: [ { id: 6, }, { id: 7, }, ], });
photos [ Photo { id: 6, name: 'my new photo...', description: 'my description...', filename: 'my photo name...', views: 0, isPublished: true }, Photo { id: 7, name: 'my new photo...', description: 'my description...', filename: 'my photo name...', views: 0, isPublished: true } ]
まとめ
ここまでで、
- オブジェクトとそのリレーションのロードについて
- findのオプションについて
を学びました。
次回はカスケードを使用する方法についてを掘り下げようと思います。
コード
今回のコードは、以下に格納しました。